在网上看到了有人用gdb调试Android中的WebKit,今天试了好一会儿,确实可行。
以下是步骤:
1. 进入android系统源码根目录,然后执行
source build/envsetup.sh
2. 启动模拟器,并打开浏览器
emulator
3. 在终端中执行
adb forward tcp:5039 tcp:5039
4. 打开另一个终端,执行
adb shell ps
找到 com.android.browser 进程号
5. 执行
adb shell gdbserver :5039 --attach pid
pid为 com.android.browser 进行号
正常反馈:
Attached; pid = ****
Listening on port 5039
6. 回到第一个终端,导出环境变量,adb, arm-eabi-gdb等的路径,在执行gdbclient报错时,可将相应的命令 的路径导出
export PATH=/android/out/host/linux-x86/sdk/android-sdk_eng.suyong_linux-x86/platform-tools:$PATH
export PATH=/android/prebuilt/./prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/:$PATH
export PATH=/android/prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin:$PATH
现在执行命令
gdbclient
成功的话就会加载一系列的符号表。试了一下设置断点,成功地在系统本地码中断了下来。下面要做的就 是熟悉GDB调试命令了。
7. 在gdb中设置断点
b FrameLoaderClientAndroid.cpp:888
8. 在模拟中用浏览器打开任一网页,就会进入断点了。