嵌入式开发/调试辅助工具

  

开发辅助工具

  

开发环境组成

  

通常开发环境由三部分组成:
构建环境:包括代码编写,程序编译,版本控制等功能。
调试环境:用于定位问题的辅助工具集
测试环境:用于验证目标程序是否满足用户要求的显性需求和隐性需求
嵌入式开发中,通常有20%的时间用于目标构建,80%的时间用于测试,调试和bug修复,工欲善其事,必先利其器,提高开发和调试效率十分重要.GNU为GCC编译器提供了配套的辅助工具集(Binutils),网址:http://www.gnu.org/software/binutils/
嵌入式开发/调试辅助工具

  

开发工具集

  

addr2line

  

将指定地址转换为对应的文件名和行号,常用于分析和定位内存错误的问题
addr2line示例:定位0地址访问

  
 <代码> # include & lt; stdio.h>
  
  int g_global=0;
  int g_test=1;
  
  extern int * g_pointer;
  走读生void函数();
  
  int主要(int命令行参数个数,char * argv [])
  {
  printf("和g_global=% p \ n ",和g_global);
  printf("和g_test=% p \ n ",和g_test);
  printf("和g_pointer=% p \ n ",和g_pointer);
  printf (" g_pointer=% p \ n ", g_pointer);
  printf("及函数=% p \ n ",和函数);
  printf(",主要=% p \ n”,及主要);
  
  func ();
  
  返回0;
  } 
  

<强>示例代码func.c

  
 <代码> # include & lt; stdio.h>
  
  int * g_pointer;
  
  void函数()
  {
  * g_pointer=(int)“D.T.Software”;
  
  返回;
  } 
  

1,开启核心转储选项
ulimit - c无限
2,运行程序,并生成崩溃的核心文件
执行导致程序崩溃的测序用例,执行后我们看到生成的核心文件
3,读取核心文件,获取IP寄存器的值(0 x08048000)
dmesg核心
在文件的最后几行,内容如下:
嵌入式开发/调试辅助工具“> <br/>这的地址0 x08048000即是IP寄存器的地址。<br/> 4,使用addr2line定位代码行<br/> addr2line 0 x08048000 - f - e测试。从<br/> <img src=

  

  

剔除称故乡文件中的调试信息,减少目标程序的大小
一本在程序发布前都选哟将调试信息剔除
过多的调试信息可能会影响程序的执行效率
带测试。从
嵌入式开发/调试辅助工具“> <br/> <强>注意事项:</强> <br/>几乎所有的调试辅助工具都依赖于目标文件中的调试信息<br/>调试信息的运用可以快速定位问题<br/>使用gcc编译程序时<强>使用g生成调试信息</强> <br/>发布程序时再考虑是否使用带剔除调试信息</p>
  <h4> ar </h4>
  <p>打包目标文件,ar crs库名。一个x。o y。o <br/>解压目标文件,基于“增大化现实”技术的x libname.a </p>
  <h4>纳米</h4>
  <p>列出目标文件中的标识符(变量,函数名)<br/>输出结果由三部分组成:{地址,段,标识符}<br/> <img src=

  

objdump

  

反汇编目标文件,查看汇编到源码的映射
objdump - d函数。o
嵌入式开发/调试辅助工具“> <br/> objdump - s函数。o <br/> <img src=嵌入式开发/调试辅助工具