GNU 工程调试器(GDB)是一个常用的 Unix 调试器。本文详述使用 gdb
调试 Android 应用和进程的方法。
调试运行中的应用或进程
gdbclient
是源码库中的一个 shell 脚本调试工具,它位于 android-7.1.1_r22/development/scripts/gdbclient
。该脚本将根据 Android 源码库的根目录,设置端口转发,在设备上启动适当的 gdbserver
,在主机上启动适当的 gdb
,配置 gdb
查找符号,并将 gdb
连接到远程的 gdbserver
。
在执行 gdbclient
首先需要设置 ANDROID_BUILD_TOP
环境变量,这个环境变量可以手动设置,如:
也可以通过如下命令设置:
也就是 Android 源码库编译前配置。
如果没有设置 ANDROID_BUILD_TOP
环境变量的话,在执行 gdbclient
时将报出如下的错误:
有了前面的那些配置,即可使用 gdbclient
调试 Android 应用程序了。要连接一个已经在运行的应用或本地层守护进程,则以 PID 作为参数执行 gdbclient
。比如,要调试 PID 为 1234 的进程,则运行:
它会为我们准备一切。
调试本地进程启动
要调试进程的启动,则使用 gdbserver
或 gdbserver64
(64 位进程)。比如:
示例输出如下:
接着,从 gdbserver
的输出中得到应用程序的 PID,并在另一个终端窗口中使用如下命令:
最后,在 gdb 提示符下键入 continue
。
使用的 gdbserver
与实际运行的应用程序格式不匹配时,在执行 gdbclient
时将报出如下的错误:
即我们在 gdb
的提示符下输入 continue
执行应用程序之后,报出了 可执行文件格式错误
。
参考文档:
打赏
Done.