先说出这问题时的周遭环境:
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<<处理后发布,原文只有博主可以看到。