GCC 工具链部分工具
addr2line
将代码地址转换为对应程序行号                常用于分析和定位内存访问错误问题
- 使用方法
 
- 开启core dump选项 
ulimit -c unlimited - 运行程序,并生成崩溃时的core文件 
执行导致程序崩溃的测试用例 - 读取core文件,获取IP寄存器的值(0x08048000) 
dmesg core
在输出内容的最后一行内寻找ip寄存器值 - 使用addr2line定位代码行 
addr2line 0x08048000 -f -e test.out
可执行程序必须携带有调试信息 
strip
剔除可执行程序中的调试信息
先用调试版程序调试,发布时通过strip去掉调试信息,不用重新编译
ar
将目标文件打包为静态库
- 打包 ar crs libname.a x.o y.o
 - 解压 ar x libname.a
 
nm
列出目标文件中的符号(变量名、函数名)及对应地址
输出结果由三部分组成(地址、段、标识符)
    08048430(地址)    T(标识符所在代码段)    func(标识符名)- 段说明
 
| 段 | 说明 | 
|---|---|
| A | 地址值在链接过程中不会发生改变 | 
| B或b | 标识符位于未初始化数据段(.bss) | 
| C | 未定义存储段的标识符,链接时决定段位置 | 
| D或d | 标识符位于数据段(.data) | 
| N | 调试专用标识符 | 
| R或r | 标识符位于只读存储区(.rdata) | 
| T或t | 标识符位于代码段(.text) | 
| U | 未定义的标识符 | 
objdump
查看程序段信息及反汇编
- objdump -d func.o 输出目标文件对应的汇编代码
 - objdump -S func.o 输出源代码和反汇编指令对照格式
 - objdump -h func.o 查看目标文件中的详细段信息
 
objdump -h输出说明
| 字段 | 说明 | 
|---|---|
| Idx | 段下标 | 
| Name | 段标识符(名字) | 
| Size | 段所占空间大小 | 
| VMA | 段起始位置的虚存地址 | 
| LMA | 段所在存储空间中的加载地址 | 
| File off | 段在目标文件中的相对位置 | 
| Algn | 段的边界对齐字节数 | 
| size | 查看目标文件中段大小 | 
| strings | 查看目标文件中的字符串 | 
    原创不易,转载请注明出处,谢谢

                
            
        
浙公网安备 33010602011771号