程序调试 | GDB常用命令备忘录
2016-09-28 本文已影响490人
rh_Jameson
最近项目需要用到gdb调试程序, 鉴于每次用时都要google回忆下常用的命令,效率有点low,故整理份命令备忘录,如下:
GDB Layout命令
每次gdb时不知道程序跑到哪了,只能list?? 错, layout窗口才是王道!!
命令 | 功能 |
---|---|
layout src | 显示源码窗口 |
layout asm | 显示汇编窗口 |
layout split | 显示源码 & 汇编窗口 |
layout regs | 显示汇编 & 寄存器窗口 |
layout next | 下一个layout |
layout prev | 上一个layout |
C-x 1 | 单窗口模式 |
C-x 2 | 双窗口模式 |
C-x a | 回到传统模式 |
GDB 跳转执行命令
命令 | 功能 |
---|---|
start | 开始启动程序,并停在main第一句等待命令 |
step | 执行下一行语句, 如语句为函数调用, 进入函数中 |
next | 执行下一行语句, 如语句为函数调用, 不进入函数中 |
finish | 连续运行到当前函数返回为止 |
continue | 从当前位置继续运行程序 |
return | 强制令当前函数返回 |
call func() | 强制调用函数, 也可以用print func() |
run | 从头开始运行程序 |
quit | 退出程序 |
注: call func() 与 print func() 的区别,在于调用void函数时, call func()没有返回值, 而print有~~
GDB调试输出命令
命令 | 功能 |
---|---|
输出变量值 & 调用函数 & 通过表达式改变变量值 | |
info var | 查看全局 & 静态变量 |
info locals | 查看当前函数局部变量 |
list | 查看当前位置代码 |
backtrace | 查看各级堆栈的函数调用及参数 |
set var 变量=xx | 将变量赋值为xx |
注:
p/x 3*i -- x for hexadecimal, o for octal, d for decimal, f for float, c for char, s for string
断点
命令 | 功能 |
---|---|
b N_LINE | 在第N_LINE行上设置断点 |
b func | 在func函数上设置端点 |
delete breakpoints | 删除断点 |
disable breakpoints | 禁用断点 |
enable 断点号 | 启动端点 |
info breakpoints | 查看断点列表 |
break foo if x>0 | 设置条件断点 |
观察点
当待观察点被读 或 被写时,程序停下来,并输出相关信息
命令 | 功能 |
---|---|
watch | 设置写观察点 |
rwatch | 设置读观察点 |
awatch | 设置读写观察点 |
info watchpoints | 查看观察点列表 |
Display跟踪点
命令 | 功能 |
---|---|
display var | 每次停下来时,显示设置的变量var的值 |
undisplay | 取消跟踪显示 |
info display | 设置读写观察点 |
info watchpoints | 查看跟踪列表 |