build gdb for Android x86

来源:互联网 发布:淘宝松本清优惠券 编辑:程序博客网 时间:2024/05/21 14:59

在android下可以有多种方式调试,包括 strace, logcat, gdbserver+gdb, gdb(直接运行在设备上的)。这些调试方式都很有用,strace 和logcat的代码都存在于android源码中在build Android源码时logcat和strace都被包含到了系统中,可以直接使用。但是gdbserver和gdb必须自己由源代码编译。

 

如果要编译Arm版本的GDB,需要在configure时配置交叉编译环境,稍微有些麻烦。我要build的是运行在vmWare的x86架构android系统的gdb/gdbserver,经过尝试,发现不用修改环境也是可以成功。我的环境为:

主机unbutu linux 内核版本:2.6.15-23-386  GCC: 4.0.3

Target android linux 内核版本:2.6.27

GDB 源码版本:gdb-6.8

 

从官网上获取gdb-6.8的源码,运行

./configure  --without-x --disable-gdbtk --disable-tui --without-included-regex --without-included-gettext

再运行

make

就可以方便的生成gdb。将gdb push 到设备中,可以尝试运行。因为gdb 的Makefile默认使用动态链接生成,运行gdb时有可能加载动态库失败。所以最好在链接时指定为静态链接。修改的方法也很方便,修改gdb-6.8文件夹的gdb子目录下的Makefile文件, 为链接选项添加-static选项。对于gdb-6.8找到CC_LD变量, 为其赋值为

CC_LD = -static

重新build gdb即可。

 

将gdb push到设备中,如果可以运行就再好不过了,这时就不需要gdbserver,因为我发现gdbserver调试动态库不会加载调试符号,这样就跟不能调试没有区别。而设备中运行的gdb则可以调试各种程序。

如果要编译gdbserver,方法也差不多,gdbserver for android x86可以在http://code.google.com/p/patch-hosting-for-android-x86-support/downloads/list直接下载到可执行程序。