如何在VIM中对嵌入式软件进行调试
在嵌入式软件开发过程中的习惯做法是: 首先,在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所连接的调试器。
其次,编辑文件/etc/vim/macros/gdb_mappings.vim。主要修改和添加的部分为:
a. 添加调试器转换函数,并设置转换开关为大写“E”键(Shift+E实现):
let s:emOS_k = 1
nmap silent> E :call SID>emOS()CR>
function! s:emOS()
if s:emOS_k
let s:emOS_k = 0
exec :!ln sf ~/buildtools/armlinux/bin/armlinuxgdb ~/buildtools/armlinux/bin/gdb
echohl ErrorMsg
echo NOW! Gdb is ready for Embedded System !!!
echohl None
else
let s:emOS_k = 1
exec :!ln sf /usr/bin/gdbpc ~/buildtools/armlinux/bin/gdb
echohl ErrorMsg
echo Gdb is ready for PC,, Now
echohl None
endif
Endfunction
b. 在语句if s:gdb_k行下添加代码:
nmap F8> :bel 25vsplit gdbvariablesCR>
nunmap E
即在进入调试状态后,屏蔽掉调试器转换快捷键E,并设置快捷键F8来显示变量值监测窗口。
c. 在let s:gdb_k = 1行下添加代码:
exec :!ln sf /usr/bin/gdbpc ~/buildtools/armlinux/bin/gdb
nmap silent> E :call SID>emOS()CR>
即在退出调试状态后,还原gdb命令为gdbpc的调用,并还原“E”的调试器转换开关作用。
d. 在/etc/vim/vimrc中添写语句:
run macros/gdb_mappings.vim
使得启动vim后,便会在vim中启动对gdb进行调用的快捷键映射。
至于在gdb_mappings.vim中具体设定的其他快捷键,由读者自己分析或设定即可。
linux操作系统文章专题:linux操作系统详解(linux不再难懂)
评论