如何使用gdb调试android webkit内核代码

来源:互联网 发布:模拟买基金的软件 编辑:程序博客网 时间:2024/06/05 18:19

如何使用gdb调试android webkit内核代码


红心地瓜

原文链接:http://blog.csdn.net/dlmu2001/article/details/6904211

得益于脚本的帮助,在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一样了。