其实Android下调试Android的native代码的文章网上也有不少描述,第一次成功使用GDB调试WebKit的流程如下:
1. 调试已运行的browser (#)
adb shell ps | grep browser
gdbserver :5039 --attach pid
或启动一个新的browser
gdbserver :5039 browser
2. 用ADB设置转发端口($)
adb forward tcp:5039 tcp:5039
3. 启动gdb client(gdb)
arm-eabi-gdb /home/apuser/android/2.3.5_8810/out/target/product/hsdroid/symbols/system/bin/app_process
4. 设置符号表(gdb)
set solib-absolute-prefix /home/apuser/android/2.3.5_8810/out/target/product/hsdroid/symbols
set solib-search-path /home/apuser/android/2.3.5_8810/out/target/product/hsdroid/symbols/system/lib
5. 与GDB server连接(gdb)
target remote :5039
6.确认动态库是否加载进来(gdb)
shared
其实Android早为我们写好了脚本,使用下面一条命令就可以完成以上的多条命令的功能,而且还不用启动多个shell窗口:
gdbclient app_process :5039 browser
gdbclient是一个shell脚本的函数,见build/envsetup.sh,当然上面这些命令可以正常执行的前提条件是你已经运行了
source ./build/envsetup.sh
lunch 7
【注意】lunch 后面的数字要看你是编译的哪该产品了。
这个里面需要注意的是app_process这个进程名,刚开始一位做davilk虚拟机同事帮忙一起弄gdb调试的环境,但由于不知到webkit的依附于哪个系统进程
而费了不少周折,由于gdb只能调试本地系统,所以需要找到是webkit是运行在哪个本地进程里,而不是虚拟机的进程。android大部分应用都是运行在app_process
进程里的。