微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 在VIM中的嵌入式软件调试

在VIM中的嵌入式软件调试

时间:02-25 来源:互联网 点击:

出现这种情况的原因是,编译规则中选择了警告选项“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已经存在了。

  2.4 在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中具体设定的其他快捷键,由读者自己分析或设定即可。

  2.5 在VIM中对嵌入式软件进行调试

  下面设定目标板上的嵌入式软件调试时所用的快捷键: E为调试器转换开关;F9为进入调试模式;F8为开启变量监视窗口;空格键为开启命令行输入窗口;调试模式为PC通过超级终端对嵌入式目标板进行输入输出,Ubuntu8.10通过TCP/IP方式对嵌入式软件进行调试;PC机Linux IP为222.31.51.147;目标板IP为222.31.51.180;调试连接端口为1234。

  ① 用VIM打开~/test/test.c,运行命令“:make testem”,将生成的testem文件拷贝到嵌入式平台的文件系统下,并在嵌入式平台运行命令,指定等待连接的交叉调试器地址、连接端口以及要调试的嵌入式程序:

  gdbserver 222.31.51.147:1234 testem

嵌入式端会出现如下的类似提示信息,

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top