我想用GDB在Android上调试一个应用程序,我可以用gdb和进程号挂钩它,但是我想看看它从一开始就做了什么。
有没有办法做到这一点?
答案 0 :(得分:4)
在root设备或模拟器上,您可以将gdb附加到zygote,并将断点放在新分叉进程即将承担正在启动的应用程序标识的位置。
如果您修改了zygote以等待调试器附加,这可能是最简单的。我相信在Jdwp调试系统中有这样的东西可以让你在启动代码的早期进入Java调试器,但是我不知道gdb已经内置了类似的东西。虽然我想你可以让它等待对于jdwp,并在附加(然后分离)java调试器之前附加gdb。
更新:我尝试了这个,通过将zygote附加到gdb并修改一个单词代码,该代码将由孩子提前执行进入无限循环,然后从zygote分离。我想我会在新的孩子出现'ps'后立即gdb并恢复它以便它可以继续。问题是孩子被杀死(可能是因为没有反应)比我输入的所有命令更快。所以它必须由一个程序完成。并且可能没有那么多你可以在不停止并且让它被杀死的情况下尽早看到 - 我的意思是你可能会在那里得到一个strace,但是你希望得知你不能从阅读源头学到什么?
答案 1 :(得分:2)
OMAPpedia的Android Debugging页面概述了使用gdbclient。
gdbclient <executable name> <port number> <task name>
您可能需要首先使用adb
设置前进端口,如下所示:
adb forward tcp:5039 tcp:5039