如何使用gdb调试android webkit内核代码
红心地瓜
得益于脚本的帮助,在Emulator中使用GDB调试Native Code的设置非常简单,比如我用gdb+gdbserver调试webkit
1. 找到你的toolchain对应的gdb,在模拟器上是arm-eabi-gdb,在prebuild下,把它的目录加到PATH里面
export PATH=$ANDROID_SRC/prebuilt/linux-x86/tootlchain/arm-eabi-4.4.0/bin:$PATH
或者直接加到~/.bashrc里面
2 执行配置脚本
cd$ANDROID_SRC
source build/envsetup.sh
3 启动模拟器,运行浏览器
l gdbclient app_ process :5039 browser
此时就能看到gdb顺利启动起来了(尽管有warning),此时就可以使用你熟悉的gdb命令了
看到
15 ldmdf sp! {r4,r7}
Currentlanguage: auto;current asm
4 设置断点
bFrameLoaderClientAndroid.cpp:868
5 执行
c
6 访问一个网址,就可以看到gdb断点了,enjoy it!
在target上搭建这个环境复杂一点,因为target出于空间的考虑,编译的是release库,而且有一个prelink的过程,主要是要修改map文件来放下webcore的debug库。
在target上搭建这个环境复杂一点,因为target出于空间的考虑,编译的是release库,而且有一个prelink的过程,主要是要修改map文件来放下webcore的debug库。
以下的实验环境是我的htc magic + cm6.0
1 .如果$ANDROID_SRC根目录下没有buildspec.mk,执行以下操作,如果有,忽略此步骤
mv build/buildspec.mk.default build/buildspec.mk
2. 修改buildspec.mk,加入以下几行
DEBUG_MODULE_libwebcore:=true
DEBUG_MODULE_libxml2:=true
TARGET_CUSTOM_DEBUG_CFLAGS:=-O0 -mlong-calls
"ADDITIONAL_BUILD_PROPERTIES+= debug.db.uid=100000
lmka bacon编译,prelink失败
prelink maperror: library libwebcore.so@0xa8300000 is too big at 10644851 bytes, it runs3304819 bytes into librarylibexpat.so@0xa8a00000!
可以看出,libwebcore有3M的空间越界了,其实我加了3M还不够,是3M多一点,所以要加4M
3.修改$ANDROID_SRC/build/core/prelink-linux-arm.map(改前请备份哦)
搜索libwebcore.so,发现
libsqlite.so 0xA8B00000 # [~2M]
libexpat.so 0xA8A00000 # [~1M]
libwebcore.so 0xA8300000 # [~7M]
将libwebcore.so的大小加到11M,也就是如下
libsqlite.so 0xA8F00000 # [~2M]
libexpat.so 0xA8E00000 # [~1M]
libwebcore.so 0xA8300000 # [~11M]
libsqlite.so之上的.so也要对应改动,这里忽略。有一点小工作量,网上有介绍可以通过修改Android.mk来disable prelink,我试了下,没有成功,所以我就老老实实改了这个prelink的map文件。
剩下的就和emulator一样了。