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.