Debug程序的常规命令总结

1. file : 查看应用程序类型,符号信息是否被stripped

2. readelf :查看elf文件 man readelf
Displays information about ELF files.

  • -h:查看程序的入口地址
  • -e:查看所有的段信息,包括-S信息
  • -s:显示所有符号信息
  • -r:查看需要重定位的符号信息
  • -a:显示所有段信息以及符号信息
  • wl:查看汇编指令地址所对应的源码文件和源码行号
  • -w:–debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges] 显示调试段中指定的内容

3. objdump:查看二进制文件信息
display information from object files.

  • -D:反汇编所有段,其中-S功能类似。当-g选项打开时,-S的反汇编效果更优
  • -R:查看需要重定义符号入口地址的存储位置
  • -T:查看动态符号表入口
  • 查看符号信息: objdump -s -j .gnu_debuglink codeMap/opt/nvme_zk/app/bin/db

4. nm:查看符号信息
list symbols from object files

  • -a:查看全部的符号信息

5. gdb

  • 调试:
    1. c语言单步调试:s/n;s - 发生函数调用时进入函数执行
    2. 汇编代码单步调试:si/ni;
  • 程序执行输入参数:set args
  • 多线程
    1. 查看全部线程栈帧:thread apply all bt
    2. 查看全部线程:info threads
    3. 切换线程: thread n
    4. 对指定线程下断点: b 行号|函数名 thread_id
    5. 只调试一个线程,其他线程stop:set scheduler-locking on/off
    6. 只stop住一个线程:set non-stop on
  • 多进程
  • 断点
    新增:b 行号|函数名 {thread_id}
    查看:info b
    删除:d b_num
    禁止断点:disable
    使能断点:enable
    临时断点:tbreak 行号|函数
    条件断点:b 行号|函数名 condition
    监视点:watch
    断点命令列表:commands b_num
    断点触发查看命令:display
  • 变量:打印变量,p var
    1. 按照格式打印内容:p /f var eg. p /x var
    2. 查看变量类型:ptype
    3. 查看数组:p *x@25
  • 寄存器
  1. 查看寄存器:info registers
  • 内存操作:
    1. 查看内存:x/xh address -> 十六进制打印出从address开始的4bytes的值
    2. 查看:x/<n/f/u> 个数/格式/大小
    3. 以二进制格式将内容加载到某地址中: restore context addr
    4. 将内存中内容dump到文件中:dump命令
    5. 修改内存:set addr context
  • 查看函数的汇编代码:disas funcname
    1. disas /m 汇编和源码一起查看
  • 查看源码:
    1. ctrl + x -> ctrl + a
    2. gdb main -tui
  • 查看调用栈
    1. bt
    2. f n :跳转栈帧
    3. 查看全部线程栈帧:thread apply all bt
  • 不中断程序的情况下,生成core文件:gdb -p ; generate-core-file ./main.core
  • 查看maps文件
  1. info proc mappings
  • 添加符号文件调试
  1. add-symbol-file file addr
  • 对子进程进行debug
  1. set follow-fork-mode [parent|child]
  2. set detach-on-fork [on|off],停止对指定进程debug

6. addr2line:将汇编指令地址转换为[源码文件:源码行号]

  • 实现原理:elf文件中有section,会维护一张汇编指令地址和行号的对应关系表

7. gcc

  • nostartfiles
  • nostdlib

8. objcopy

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值