先说出这问题时的周遭环境:
Android SDK Tools r12
Android SDK Platform-tools r6
Android NDK r6
HTC G10 DesireHD(root)
Eclipse 3.7 Indigo
ADT 12.0.0
Windows XP SP3
问题描述:按着Sequoyah Native Debug的教程走,到执行ndk-gdb起服务的时候,提示”found running pid:0 could not extract pid of application…”说找不到程序的PID(顺带一提,之前还有一次是提示could not extract package’s data directory…,经查发现原因应该是设备没有root),执行adb shell ps发现要调试程序的进程就在那里,PID也看到正常,为什么ndk-gdb说获取不到PID呢?
翻了一下ndk-gdb的脚本,发现它获取PID的方法是通过执行这个:\android-ndk-r6\build\awk\extract-pid.awk,打开awk一看,里面这样写着:
# We use the fact that the 9th column of the 'ps' output # contains the package name, while the 2nd one contains the pid # $9 ~ PACKAGE { PID=$2 } 又看了一下adb shell里ps的输出:
ps PID USER VSZ STAT COMMAND 1 0 352 S /init 2 0 0 SW [kthreadd] 3 0 0 SW [ksoftirqd/0] 4 0 0 SW [watchdog/0] 5 0 0 SW [events/0] 6 0 0 SW [khelper] 9 0 0 SW [async/mgr] 12 0 0 SW [suspend] 13 0 0 SW [npa/0] 229 0 0 SW [sync_supers] 我勒个去,是因为版本变更年代久远,还是这脚本在坑我的爹?PID和程序包名分明应该是对应第1列和第5列,怎么就说是2和9列呢? 改了一下awk脚本:
$5 ~ PACKAGE { PID=$1 } 再次执行ndk-gdb,这下ok了,PID正常获得,gdb server正常启动并attach上了! UPDATE1:有幸检查了一下emulator上的ps输出,确实是2-9对应关系,唉,无语... UPDATE2:又查了一个机器,Win7上看WildFire G8,官方2.2系统,shell ps也是2-9对应,不知道是什么原因了...
博主友情提示:
如您在评论中需要提及如QQ号、电子邮件地址或其他隐私敏感信息,欢迎使用>>博主专用加密工具v3<<处理后发布,原文只有博主可以看到。