• GCC 工具链部分工具


    toc

    addr2line

    将代码地址转换为对应程序行号                常用于分析和定位内存访问错误问题
    
    • 使用方法
    1. 开启core dump选项
      ulimit -c unlimited
    2. 运行程序,并生成崩溃时的core文件
      执行导致程序崩溃的测试用例
    3. 读取core文件,获取IP寄存器的值(0x08048000)
      dmesg core
      在输出内容的最后一行内寻找ip寄存器值
    4. 使用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 查看目标文件中的字符串




    原创不易,转载请注明出处,谢谢
  • 相关阅读:
    sublime问题:失去焦点自动保存
    sublime问题:Tab键不缩进
    sublime问题:默认的中文字体显示异常
    pip换源 解决下载速度慢
    Oracle问题:ORA-01843: 无效的月份
    Eclipse设置自动生成的javadoc
    Java命名规范
    redis的道面试题, 有这一篇就足够了
    批量编译生成python的pyd文件
    测试种类大汇总(45类)
  • 原文地址:https://www.cnblogs.com/Keeping-Fit/p/15463826.html
Copyright © 2020-2023  润新知