Gdb等几则笔记
转载时请注明出处和作者联系方式
作者联系方式:李先静 <xianjimli at hotmail dot com>
一、gdb几种常见使用方式及编译方法:
1.在本机调试本机的程序。
在正常情况下,我们调试程序都是用的这种方法。
这时编译gdb和编译普通应用一样:
mkdir host-i386
cd host-i386
../configure –prefix=/usr/local
make;make install
2.在ARM板上直接调试ARM程序。
这种情况比较少见,但确实可行,不过介于一般ARM CPU的运算能力,只能调试小程序,因为调试大程序实在慢得让人难以忍受。调试时,在主机端把程序编译好后,通过NFS映射到ARM板上。保持源程序在ARM上和主机上的目录一致,这样在gdb中就不用>设置源代码的路径了。
这时编译gdb和交叉编译普通程序一样,指定—host=arm-linux即可。
mkdir arm
cd arm
../configure --prefix=/usr/local/arm-rootfs/usr/local –host=arm-linux –build=i386-linux –disable-werror --without-x --disable-gdbtk --disable-tui
make;make install
3.在ARM板运行gdbserver,在主机上运行gdb。
由于gdbserver占用资源很少,适合在目标板上运行,所以这种情况最为典型。它的使用方法比较简单,但是调试共享库有点麻烦,我在<嵌入式linux调试:用gdbserver调试共享库>中介绍过一种方法,不知道有没有更好办法。
编译主机端的gdb:要注意的是,这和第一种中的编译方法不一样,因为此时gdb虽然在主机上运行,它解释的是ARM指令,而不是主机的i386指令,所以要指定–target=arm-linux。编译方法如下:
mkdir arm-target
cd arm-target
../configure --prefix=/usr/local/target-arm –target=arm-linux
make;make install
编译ARM板的gdbserver:实际上就是交叉编译gdbserver,与第二种方法类似,这里不再多说。
二、版本不匹配引用的问题。
最近测试浏览器(GTK+ minimo),发现 minimo浏览部分网页时,会在pango_default_break里assert掉。今天用gdb跟了一下,>原来是因为pango与glib不匹配引起的。前段时间,我们升级了glib,经过一段时间的测试没有发现什么问题。今天发现pango>和glib一些枚举定义不一致,结果引发了assert,升级了pango之后,浏览器非常稳定了。除了多测试,好像对这种错误无能为力,不知大家有什么好方法没有?
~~end~~