基本概念
gdb是GNU开发的针对Linux/Unix环境下程序的调试工具。为了节约目标系统的资源,gdb通常采用gdb+gdbserver的方式进行调试。
在Android GDB调试场景下,gdb运行在PC端,gdbserver运行在Android系统中。在实际的调试过程中,PC端的gdb参照调试符号文件向gdbserver发出命令,gdbserver就会向运行程序发出信号,从而实现对Android系统运行程序的跟踪与控制:
- 启动尚未运行C/C++程序,或者绑定到正在运行的C/C++程序
- 让被调试的程序在指定的断点处中止运行
- 查看当前中止状态下的对用堆栈,局部变量等信息
- 通过对变量赋值,调用函数等操作来动态的改变程序的执行环境
调试环境准备
gdb
gdb运行在PC端,通常位于Android源码中的prebuilt目录下。不同的项目,不同的平台,gdb的位置可能不同,但是我们可以在进入prebuilt目录下通过find命令来查找:find ./ -name “gdb“,常见路径列举如下:
prebuilts/gdb/linux-x86/bin/gdb
prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-gdbgdbserver
gdbserver运行在Android系统中,默认已经安装在eng或者userdebug的软件版本中;根据被调试程序的运行位数(32位/64位)的不同,gdbserver需