Gdb等几则笔记

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_breakassert掉。今天用gdb跟了一下,>原来是因为pangoglib不匹配引起的。前段时间,我们升级了glib,经过一段时间的测试没有发现什么问题。今天发现pango>glib一些枚举定义不一致,结果引发了assert,升级了pango之后,浏览器非常稳定了。除了多测试,好像对这种错误无能为力,不知大家有什么好方法没有?

~~end~~

 
原文地址:https://www.cnblogs.com/zhangyunlin/p/6167696.html