gdb调试基本方法

2018-11-30  本文已影响0人  卐卍扫地僧卐卍

gdb调试基本方法

gdb调试常用命令

命令 命令缩写 命令说明
list l 显示多行源代码
break b 设置断点
info i 描述程序的状态
display disp 跟踪查看某个变量
print 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 <program> 启动gdb gdb test
set args 设置运行时参数 set args 12 13
show args 查看运行参数  
path <dir> 设置程序运行路径  
show paths 查看程序运行路径  
set environment varname [= value] 设置环境变量 set env USER=ww
show environment [varname] 查看环境变量  
cd <dir> 切换路径  
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 打印当前函数中所有局部变量及值  

查看源程序

6.png

查看运行数据

7.png
上一篇下一篇

猜你喜欢

热点阅读