在Android设备上怎么调试守护进程?例如Rild/Installd 在Android设备上怎么调试守护进程?例如Rild/Installd 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用gdb?用ndk-gdb?整个调试环境要怎么搭建?看到好多只能在UBUNTU环境里面去搭调试环境。在WINDOWS环境下搭不了吗?能用CYGWIN来实现吗? 用gdb和gdbserver调试android native codehttp://www.4ucode.com/Study/Topic/1891789其实网上有很多类似的文章,但是你会发现几乎都不可重现,要么是细节没讲清楚,要么是压根自己没有真正去试过。这里,我仅给出自己用gdb和gdbserver调试android native code的实际过程,希望对大家有用。 注:以调试mediaserver进程为例. 第一步:你需要下载android,以debug方式编译,并以生成的image起模拟器或者设备。 第二步:你需要从“http://developer.download.nvidia.com/tegra/files/tegra-gdb-20100430.zip”下载一个gdb,覆盖到android源码中gdb对应的位置。 第三步:adb shell到设备,并起gdbserver侦听目标进程: adb shell gdbserver :5039 /system/bin/mediaserver 第四步: 建立pc机和设备的消息连接: adb forward tcp:5039 tcp:5039 第五步: 使用gdb调试目标进程: cd android_src prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-gdb out/debug/target/product/generic/symbols/system/bin/mediaserver 第六步: 设置符号表: set solib-absolute-prefix /your_android_src_path/out/debug/target/product/generic/symbols set solib-search-path /your_android_src_path/out/debug/target/product/generic/symbols/system/lib 第七步: 使gdb和gdb server建立连接: target remote :5039 第八步: ok. 现在可以使用gdb的命令进行调试,譬如next\break\step\info thread等. 使用GDB调试Android NDK开发的程序http://www.android123.com.cn/topic/ndk/962.html 很多网友不清楚Android NDK使用C/C++开发的应用,其实在Linux下调试我们主要使用GDB调试。当然使用Logcat或自己写入文件的方式调试也是可以的。有关Log打印可以参考Android开发网早期文章。今天Android123分享下GDB调试。 对于使用NDK编译出来的工具除了so库文件外,会会有gdbserver和gdb.setup文件,方法为 1. 在PC的命令提示符下进入ndk根目录,执行ndk-build NDK_DEBUG=1 这样,将会强制生成debug调试版的文件,将设我们NDK工程名为 cwj-test ,这里要说明的是编译出来的库文件在libs目录下是没有符号的,我们要obj下的文件,否则symbol无法正确加载。 2. 我们将生成的gdbserver和so库文件复制到/data目录下面,使用adb push命令,或者直接使用Eclipse中DDMS的File Explorer手动复制,不过对于真机可能没有这个列举目录的权限,你可以使用Android模拟器。 3. 进入Android手机或模拟器的命令行,我们使用adb shell命令,接下来进入刚才的文件夹,比如说adb shell /data/gdbserver 10.0.0.2:1987 ./cwj-test 这句你的手机ip假设为10.0.0.2端口号为1987,工程名为cwj-test 如果没有问题的话,会看到Listening on port 1987 这代表正在监听。 4. 接下来在新开一个PC命令行,这里Android123使用的是NDKr6,在 android-ndk-r6\toolchains\arm-linux-androideabi-4.4.3\prebuilt\windows\bin\arm-linux-androideabi-gdb.exe ./cwj-test 执行 5. (gdb) target remote 10.0.0.2:1234 调试了,这里的ip和端口要和上面的对应,当然本机的ip你可以使用localhost代替。 使用gdb在Android Emulator中进行调试http://android.tgbus.com/Android/tutorial/200901/174638.shtml使用GDB 单步调试Android本地代码http://www.bobbog.com/archives/24Android上如何用arm-eabi-gdb调试程序http://pjq.me/wiki/doku.php?id=android:gdb-debug Android系统中调试动态链接库so文件的步骤http://blog.wjmjimmie.cn/archives/154.html GDB调试webkit技巧一则http://mogoweb.net/archives/309用gdb调试 android webkit http://blog.csdn.net/mayqlzu/article/details/5669241 用Eclipse开发与调试纯粹的Android C++程序,非ndk-build、ndk-gdbhttp://www.eye88.com/463 使用gdb在Android Emulator中进行调试c程序http://xiangmocheng.blogbus.com/logs/41014988.html 执行gdbserver直接失败# gdbserver :5039 /sytem/bin/MAP100Gpsgdbserver :5039 /sytem/bin/MAP100Gps[1] Segmentation fault gdbserver :5039 /sytem/bin/MAP100Gps# android-gdb-6.8.tar.bz2http://117.79.157.233/download/happyfirst_2009/4004971 用GDB调试Segmentation Fault错误 http://blog.csdn.net/learnhard/article/details/4879834自己编译Android gdbserver(解决运行 gdbserver时 Segmentation fault 问题) http://blog.csdn.net/yuleslie/article/details/7226767 用GDB调试Segmentation Fault错误 http://blog.csdn.net/learnhard/article/details/4879834自己编译Android gdbserver(解决运行 gdbserver时 Segmentation fault 问题) http://blog.csdn.net/yuleslie/article/details/7226767 Android build gdbserver http://blog.csdn.net/yuleslie/article/details/7226605目前android2.2 和android2.3上的prebuilt gdbserver一执行就会报错segmentfault,prebuilt的gdbserver是静态编译的,这样做是为了让gdb能跨android的各个版本使用,但这个做法并没有考虑到kernel和libc的多样性。所以就出现了segment fault。 从android issue上看到这样的解决办法,具体做法就从git上下载gdb的代码然后重新编译 Linux使用日志系统调试守护进程http://www.jz123.cn/text/0532676.html 守护进程怎样调试?http://topic.csdn.net/t/20060714/21/4881641.html如果要调试已经在运行的daemon进程: 先用ps命令找出你的进程的进程号,例如你的程序叫mydaemon则可以这样: ps -ef|grep mydaemon 然后就可以用gdb来对这个进程进行调试了,假设mydaemon在当前目录下,则: gdb ./mydaemon pid 也可以先进入gdb然后用gdb的attach名利把这个进程加载近来。 如果进程还没有运行则可以直接用gdb来运行也可以: gdb ./mydaemon 然后设置断点,然后run 还有一个常用的办法就是用strace strace -p pid 这个办法有时候用来检查一些错误很有效。 gdb多线程/多进程(守护进程)调试 http://blog.csdn.net/yeahguyewen/article/details/6196190 Linux如何避免进程僵死http://www.jz123.cn/text/0532677.html 详解:linux daemon守护进程 http://www.xker.com/page/e2011/0923/102718.html 不知道这个调试环境要怎么搭建,不知道能不能借鉴LINUX下面GDB调试的一些东西。 我工作搞android 手機...我用gdb 調試手機中 gdbserver :5039 /system/bin/xxxx是可以調試..不過調試到固定地方就出現 access memory error 請問這是什麼問題我用 ps & top 去看 xxxx 狀態是 T ... 狀態是S sleep 的進程能調是嗎?還是需要在R run 狀態進程才可以調試?? 謝謝 当然不能调试了,T 表示 僵尸进程,没有任何资源了,不在运行,只是等待被父进程回收或者init回收 请问一下树草莓能做android游戏开发吗? EGLContext的怪问题 终极录音不能在android2.3上录音的问题 android out目录 WebView的问题! android 目录问题 有谁知道httpresponse.addHeader和httpget.setHeader有什么不同吗 webrtc安卓端的音频录制 android 简单视频通话 关于聊天功能的实现!大神请指教~~~~~ monkeyrunner drag 问题 智能机那些事
http://www.4ucode.com/Study/Topic/1891789
其实网上有很多类似的文章,但是你会发现几乎都不可重现,要么是细节没讲清楚,要么是压根自己没有真正去试过。这里,我仅给出自己用gdb和gdbserver调试android native code的实际过程,希望对大家有用。 注:以调试mediaserver进程为例. 第一步:你需要下载android,以debug方式编译,并以生成的image起模拟器或者设备。 第二步:你需要从“http://developer.download.nvidia.com/tegra/files/tegra-gdb-20100430.zip”下载一个gdb,覆盖到android源码中gdb对应的位置。 第三步:adb shell到设备,并起gdbserver侦听目标进程: adb shell gdbserver :5039 /system/bin/mediaserver 第四步: 建立pc机和设备的消息连接: adb forward tcp:5039 tcp:5039 第五步: 使用gdb调试目标进程: cd android_src prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-gdb out/debug/target/product/generic/symbols/system/bin/mediaserver 第六步: 设置符号表: set solib-absolute-prefix /your_android_src_path/out/debug/target/product/generic/symbols set solib-search-path /your_android_src_path/out/debug/target/product/generic/symbols/system/lib 第七步: 使gdb和gdb server建立连接: target remote :5039 第八步: ok. 现在可以使用gdb的命令进行调试,譬如next\break\step\info thread等.
http://www.android123.com.cn/topic/ndk/962.html
很多网友不清楚Android NDK使用C/C++开发的应用,其实在Linux下调试我们主要使用GDB调试。当然使用Logcat或自己写入文件的方式调试也是可以的。有关Log打印可以参考Android开发网早期文章。今天Android123分享下GDB调试。 对于使用NDK编译出来的工具除了so库文件外,会会有gdbserver和gdb.setup文件,方法为 1. 在PC的命令提示符下进入ndk根目录,执行ndk-build NDK_DEBUG=1 这样,将会强制生成debug调试版的文件,将设我们NDK工程名为 cwj-test ,这里要说明的是编译出来的库文件在libs目录下是没有符号的,我们要obj下的文件,否则symbol无法正确加载。 2. 我们将生成的gdbserver和so库文件复制到/data目录下面,使用adb push命令,或者直接使用Eclipse中DDMS的File Explorer手动复制,不过对于真机可能没有这个列举目录的权限,你可以使用Android模拟器。 3. 进入Android手机或模拟器的命令行,我们使用adb shell命令,接下来进入刚才的文件夹,比如说adb shell /data/gdbserver 10.0.0.2:1987 ./cwj-test 这句你的手机ip假设为10.0.0.2端口号为1987,工程名为cwj-test 如果没有问题的话,会看到Listening on port 1987 这代表正在监听。 4. 接下来在新开一个PC命令行,这里Android123使用的是NDKr6,在 android-ndk-r6\toolchains\arm-linux-androideabi-4.4.3\prebuilt\windows\bin\arm-linux-androideabi-gdb.exe ./cwj-test 执行 5. (gdb) target remote 10.0.0.2:1234 调试了,这里的ip和端口要和上面的对应,当然本机的ip你可以使用localhost代替。
http://android.tgbus.com/Android/tutorial/200901/174638.shtml
使用GDB 单步调试Android本地代码
http://www.bobbog.com/archives/24Android上如何用arm-eabi-gdb调试程序
http://pjq.me/wiki/doku.php?id=android:gdb-debug
http://blog.wjmjimmie.cn/archives/154.html
http://mogoweb.net/archives/309用gdb调试 android webkit
http://blog.csdn.net/mayqlzu/article/details/5669241
http://www.eye88.com/463
http://xiangmocheng.blogbus.com/logs/41014988.html
# gdbserver :5039 /sytem/bin/MAP100Gps
gdbserver :5039 /sytem/bin/MAP100Gps
[1] Segmentation fault gdbserver :5039 /sytem/bin/MAP100Gps
#
http://117.79.157.233/download/happyfirst_2009/4004971
http://blog.csdn.net/learnhard/article/details/4879834自己编译Android gdbserver(解决运行 gdbserver时 Segmentation fault 问题)
http://blog.csdn.net/yuleslie/article/details/7226767
http://blog.csdn.net/learnhard/article/details/4879834自己编译Android gdbserver(解决运行 gdbserver时 Segmentation fault 问题)
http://blog.csdn.net/yuleslie/article/details/7226767
http://blog.csdn.net/yuleslie/article/details/7226605目前android2.2 和android2.3上的prebuilt gdbserver一执行就会报错segmentfault,prebuilt的gdbserver是静态编译的,这样做是为了让gdb能跨android的各个版本使用,但这个做法并没有考虑到kernel和libc的多样性。所以就出现了segment fault。 从android issue上看到这样的解决办法,具体做法就从git上下载gdb的代码然后重新编译
http://topic.csdn.net/t/20060714/21/4881641.html如果要调试已经在运行的daemon进程:
先用ps命令找出你的进程的进程号,例如你的程序叫mydaemon则可以这样:
ps -ef|grep mydaemon
然后就可以用gdb来对这个进程进行调试了,假设mydaemon在当前目录下,则:
gdb ./mydaemon pid
也可以先进入gdb然后用gdb的attach名利把这个进程加载近来。
如果进程还没有运行则可以直接用gdb来运行也可以:
gdb ./mydaemon
然后设置断点,然后run
还有一个常用的办法就是用strace
strace -p pid
这个办法有时候用来检查一些错误很有效。
http://blog.csdn.net/yeahguyewen/article/details/6196190
http://www.jz123.cn/text/0532677.html
http://www.xker.com/page/e2011/0923/102718.html
当然不能调试了,T 表示 僵尸进程,没有任何资源了,不在运行,只是等待被父进程回收或者init回收