如果问大多数人在嵌入式环境最常用的是什么什么调试工具,大家肯定回答GDB了。但如果仅用GDB的命令行方式,基本上稍复杂的程序,与windows下程序的可视调试方式相比要困难许多.特别是在嵌入式系统,在使用目标板gdbserver和主机上gdb以targetremote方式进行调试,会更加复杂。
可喜的是,在LinuxX11环境之下的insight可以支持嵌入式系统的调试。Insight是最早由RedHat开发的可视化gdb,它仍然是一个完整的gdb,只是为gdb增加了GUI功能.GDB的所有命令通过console窗口都可使用,同时还具有一定的可视化调试功能.比仅使用GDB要直观、简便许多,称得上是嵌入式系统调试利器。
1.insight的交叉编译
从insight的官网http://sourceware.org/insight/下载最新版本的insight,目前是GDB/Insight6.8-1.
如果仅是简单地
./confiugre--host=arm-none-linux-gnueabi--prefix=/usr/local/arm
进行配置,会出现下面错误:
--------------------------------------------------------------------------------------------------
In file included from/home/lucid/software/insight-6.8-1/tk/unix/../generic/tkInt.h:21,
from/home/lucid/software/insight-6.8-1/tk/unix/../generic/tk3d.h:18,
from/home/lucid/software/insight-6.8-1/tk/unix/../generic/tk3d.c:16:
/home/lucid/software/insight-6.8-1/tk/unix/../generic/tk.h:96:fatal error: X11/Xlib.h: No such file or directory
compilation terminated.
make[3]: *** [tk3d.o] Error 1
make[3]: Leaving directory`/home/lucid/software/insight-6.8-1/tk/unix'
make[2]: *** [all] Error 2
make[2]: Leaving directory`/home/lucid/software/insight-6.8-1/tk'
make[1]: *** [all-tk] Error 2
make[1]: Leaving directory`/home/lucid/software/insight-6.8-1'
make: *** [all] Error 2
------------------------------------------------------------------------------------------------
开始仅是简单地认为,insight依赖于glib,交叉编译glib后,仍会出现上面的错误:
回过头认真地想一想,编译的还是在宿主机上的程序,但是程序是调试设备上运行的程序,因此应该是典型的交叉编译问题,
要设置正确的--host选项和--target选项
正确配置如下:
./configure --host=i686-pc-linux-gnu--target=arm-none-linux-gnueabi--prefix=/opt/arm-linux-insight
然后编译:
make
这时会出现下面的简单的一个错误:
------------------------------------------------------------------------------------------------
../.././tcl/unix/../compat/strstr.c: Infunction 'strstr':
../.././tcl/unix/../compat/strstr.c:40:warning: argument 'string' doesn't match built-inprototype
../.././tcl/unix/../compat/strstr.c:40:warning: argument 'substring' doesn't match built-inprototype
../.././tcl/unix/../compat/strstr.c:67:error: 'NULL' undeclared (first use in this function)
../.././tcl/unix/../compat/strstr.c:67:error: (Each undeclared identifier is reported only once
../.././tcl/unix/../compat/strstr.c:67:error: for each function it appears in.)
make[3]: *** [strstr.o] Error 1
---------------------------------------------------------------------------------------------
只要在源码strstr.c中67行将NULL改为0,就能顺利编译
make install
安装成功后,将PATH路径中加入/opt/arm-linux-insight/bin,在图形界面的命令行中执行
arm-none-linux-gnueabi-insight
就会出现insight的图形调试界面
2.编译gdbserver
然后进入gdb/gdbserver目录
./configure--host=arm-none-linux-gnueabi--prefix=/usr/local/arm
make
sudo make install
会在/usr/local/arm/bin中找到gdbserver,将其拷到开发板的执行文件路径中,就可以启动gdbserver进行嵌入式设备的调试了