Android真机执行ndk-gdb后出现”found running pid:0 could not extract pid of application…”的解决方法

先说出这问题时的周遭环境:

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号、微信号、电子邮件地址或其他隐私敏感信息,欢迎通过>>博主专用加密工具v2<<加密后发布,原文只有博主可以看到。