在VIM中的嵌入式软件调试
③ 安装vimgdb的runtime文件,运行下面的命令:
cd ~/down/vimgdb
tar zxfv vimgdb_runtime.tgz C /usr/share/vim/vimfiles
2.3 建立交叉调试嵌入式软件的gdb组件
① 编译嵌入式gdb调试器服务端gdbserver,运行如下的命令:
cd ~/down/gdb6.8/gdb/gdbserver
./configurehost=armlinux target=armlinux
CC=armlinuxgcc make
将当前目录下的gdbserver拷贝到目标板文件系统的/bin目录下,以备交叉调试用。
② 编译安装交叉调试器gdb,运行如下命令:
cd ~/down/gdb6.8
./configure target=armlinux prefix=/home/popeye/buildtools/armlinux/
注意,这里的prefix的值必须填写绝对路径,而不能用“ ~”来替代用户路径/home/popeye,否则会提示prefix路径赋值错误。然后运行:
make
这个过程中,可能会出现图2所示的错误。
出现这种情况的原因是,编译规则中选择了警告选项“Werror”。它会将所有的警告转变为错误,而且出现的有关“getwd”函数的提示信息表明,这里编译器检测到的应该是一个“警告”,而不是真正的语法错误。所以,需改正编译选项:
cd~/down/gdb6.8/gdb
gedit Makefile
注意,此处的Makefile是在执行完上述的make命令后才产生的,在最初的代码包里不含有这个文件。对文件的145行进行修改,去掉WERROR_CFLAGS的赋值,即将“145 WERROR_CFLAGS = Werror”修改成“145 WERROR_CFLAGS =”。然后:
cd ~/down/gdb6.8
make
make install
图2 make过程中的错误提示
最后进入~/buildtools/armlinux/bin中,发现交叉调试器armlinuxgdb已经存在了。
在嵌入式软件开发过程中的习惯做法是: 首先,在PC机上编译调试程序,如果在PC机上运行正常,再进行交叉编译。然后,将软件移植到目标板上,如果在目标板上出现bug,再用交叉调试器armlinuxgdb进行调试。
简而言之,对嵌入式软件的调试过程包含两个部分:PC机上调试部分和嵌入式平台上的调试部分。在这个过程中,可能既用到PC机上的调试器gdb,又用到交叉调试器armlinuxgdb,而对应的是同一个源代码程序和运行在不同平台上的两个可执行程序。同时涉及两个调试器转换的问题,但vimgdb只能对字符串为“gdb”的系统命令进行调用。
下面,将这个比较困难的问题简单化:
① 编辑适用的Makefile,控制生成对应不同平台的可执行程序:
cd ~/test
其中,test.c为实验代码,Makefile为编译规则,我们简单编写Makefile的内容为:
testpc: test.c
gcc g Wall o testpc test.c
testem: test.c
armlinuxgcc g Wall o testem test.C
当执行“make testpc”命令时,就会生成可运行在PC机上的可执行程序;执行“make testem”则生成可运行在嵌入式目标板上的可执行程序。
② 修改vimgdb的快捷键映射脚本,在VIM中实现PC调试器与交叉调试器的轻松切换。
首先,针对vimgdb只能对字符串为“gdb”的系统命令进行调用,做如下的工作:
mv /usr/bin/gdb /usr/bin/gdbpc
cd ~/buildtools/armlinux/bin
ln s /usr/bin/gdbpc gdb
由于已经将~/buildtools/armlinux/bin添加到了系统路径里面,所以执行完上述操作后,在任何时候,运行“gdb”命令时,真正运行的调试器取决于这里gdb所连接的调试器。
评论