gdb调试基本方法
gdb调试常用命令
命令 | 命令缩写 | 命令说明 |
---|---|---|
list | l | 显示多行源代码 |
break | b | 设置断点 |
info | i | 描述程序的状态 |
display | disp | 跟踪查看某个变量 |
p | 打印内部变量值 | |
frame | f | 查看栈帧 |
backtrace | bt | 查看函数调用信息 |
watch | 监视变量值的变化 | |
set var name=v | 设置变量的值 | |
start | 执行代码(停在main的第一条语句) | |
run | r | 运行代码 |
step | s | 执行下一条语句(会进入调用函数) |
next | n | 执行下一条语句(不进入调用函数) |
continue | c | 继续运行程序 |
kill | k | 终止正在调试的程序 |
file | 加载需要调试的程序 | |
quit | q | 退出 |
在GDB中运行程序
命令 | 说明 | 例子 |
---|---|---|
gdb | 启动gdb | gdb test |
set args | 设置运行时参数 | set args 12 13 |
show args | 查看运行参数 | |
path
| 设置程序运行路径 | |
show paths | 查看程序运行路径 | |
set environment varname [= value] | 设置环境变量 | set env USER=ww |
show environment [varname] | 查看环境变量 | |
cd
| 切换路径 | |
pwd | 显示当前路径 | |
run > outfile | 重定向控制程序输出 |
断点(BreakPoint)
命令 | 说明 | 例子 |
---|---|---|
break [function] | 进入指定函数时停住 | c++ calss::function/function(type,type) |
break [filename:function] | 在源文件filename的function函数入口处停住 | |
break [linenum] | 指定行号停住 | |
break [filename:linenum] | 在源文件filename的linenum行停住 | |
break [+offset] | 当前行的前offset行停住 | |
break [-offset] | 当前行的后offset行停住 | |
break … if condition | 满足条件停住 | |
info breakpoints [n] | 查看断点信息 | |
info break [n] | 查看断点信息 | |
clear | 清除所有已定义的停止点 | |
clear [function] | 清除函数所有已定义的停止点 | |
clear [filename:function] | 清除函数所有已定义的停止点 | |
clear [linenum] | 清除指定行的停止点 | |
clear [filename:linenum] | 清除指定行的停止点 | |
delete [breakpoints] [range…] | 删除指定的停止点 | |
disable [breakpoints] [range…] | 失能指定的停止点 | |
enable [breakpoints] [range…] | 使能指定的停止点 | |
enable [breakpoints] once [range…] | 使能指定的停止点一次后自动disable | |
enable [breakpoints] delete [range…] | 使能指定的停止点一次后自动删除 |
观察点(WatchPoint)
命令 | 说明 | 例子 |
---|---|---|
watch [expr] | 为expr设置观察点 | |
rwatch [expr] | expr被读时,停止程序 | |
awatch [expr] | expr被读或写时,停止程序 | |
info watchpoints | 列出当前所有观察点 |
运行/单步
命令 | 说明 | 例子 |
---|---|---|
continue/c/fg [ignor-count] | 恢复程序运行 | |
step [count] | 会进入函数调用 | |
next [count] | 不会进入函数调用 | |
set step-mode on | 打开step-mode模式 | |
set step-mode off | 关闭step-mode模式 | |
finish | 运行程序至当前函数完成返回,并打印返回时的堆栈地址、返回值、参数值等信息 | |
until/u | 运行程序至退出循环体 | |
stepi/si | 单步执行机器指令 | |
nexti/ni | 单步执行机器指令 | |
display /i $pc | 打开汇编代码 |
查看堆栈信息
命令 | 说明 | 例子 |
---|---|---|
backtrace/bt [n] | 打印栈信息 | |
info args | 打印出当前函数的参数名及值 | |
info locals | 打印当前函数中所有局部变量及值 |