GDB常用命令
GDB
Table of Contents
1 GDB
1.1 载入程序和core
- 载入程序 gdb –args ./myprogram arg1 arg2 …
- 载入core gdb -c core.xxxx ./myprogram
- 载入core gdb ./myprogram core.xxxx
- attach进程 gdb -p <pid>
1.2 断点
- 断点到当前文件某个函数 break <function>
- 断点到当前文件某行 break <linno>
- 断点到某个文件位置 break <file>:<function>/<lineno>
- 断点到某个地址 break <addr>
- 条件判断 break <breakspec> if <condition>
- 查看所有断点 info breakpoints
- 删除所有断点 delete
- 删除某个断点 delete <break-no>
- 开启某个断点 enable <break-no>
- 禁用某个断点 disable <break-no>
对于多线程情况下面,默认断点断到所有线程上。我们也可以break到某个线程上。
- break <breakspace> [thread <number>] if <condition>
1.3 流程控制
- 运行 run
- 继续执行 cont(continue)
- 单步执行 n(next)
- 单步进入 s(step)
- 执行完本函数 finish
- 查看当前运行状态 info prog
1.4 查看代码
- 定位源代码目录 dir <source-directory>
- 查看当前位置代码 list
- 查看当前文件函数 list <function-name>
- 查看当前文件某行 list <lineno>
- 查看其他文件 list <file>:<function></lineno>
1.5 查看变量
- 查看表达式类型 whatis <expr>
- 查看变量类型 ptype <var>
- 查看变量值 print /FMT <var>
- 查看所有全局和静态变量 info variables
- 查看内存内容 x/(NUM)(FMT) addr
- dump内容 dump [OPTION] FILE start end
1.6 堆栈相关
- 查看当前栈局部变量 info local
- 查看当前栈调用参数 info args
- 查看栈调用情况 bt(backtrace)
- 查看栈调用详细情况 bt full
- 切换函数栈 frame <frame-id>
1.7 线程相关
- 查看当前所有线程信息 info threads
- 切换线程 thread <thread-id>
- 应用线程命令 thread apply [all|no1 no2 …] command
1.8 汇编相关
- 查看当前寄存器 info registers
- 反汇编当前地址 disassemble
- 反汇编某个函数 disassemble <function>
- 反汇编某个地址范围 disassemble <addr1> <addr2>
- 设置汇编格式 set disassembly-flavor [intel/att]