gdb调试命令

方法一:gdb [exec file] [core file]
方法二:gdb -c [core file] [exec file]
finish连续运行到当期函数返回为止,然后停下来等待命令
info locals(或i locals或I locals)查看当前栈帧局部变量的值
list(或l)列出源代码,列出此刻运行到代码行的函数的上下文代码
list 行号列出从第几行开始的源代码
list  n1n2显示n1行和n2行之间的代码
list 函数名列出某个函数的源代码
list  ,last显示以指定的last为结束行,显示10行
list  +以上次显示的结束行为起始行显示后10行
list  -以上次显示的起始行为结束行显示前10行
next(或n)执行下一行语句
print(或p)打印表达式的值,通过表达式可以修改变量的值或者调用函数
print *a@10如果a是一个数组,这样显示数据的10个元素的值
print var=10修改运行时变量的值
quit(或q)退出gdb调试环境
set 变量=变量值修改变量的值
set args  参数1 参数2设置运行参数
show args查看运行参数
set width 数目设置GDB的行宽
set listsize  数目设置查看源代码时每次显示的行数
show listsize显示已设置的显示行数
start开始执行程序,停在main函数第一行语句前面等待命令
step(或s)执行下一行语句,如果有函数调用则进入到函数中
break(或b) 行号在某一行设置断点
break  函数名在某个函数开头设置断点
break 34 if var=12设置条件断点,当var等于12的时候就在34行设置断点
break Refresh.cpp:120在文件Refresh.cpp的第120行设置断点
b filename:function在文件的函数前设置断点
b 0x3400a用于在内存某一位置处设置断点
tbreak 行号设置临时断点,到达后断点自动删除
tbreak 函数名设置临时断点,到达后断点自动删除
cd 目录切换工作目录
pwd显示程序工作目录
continue(或c)从当前位置开始练习运行程序,直至下一个断点或者结束
delete N删除标号为N的断点,标号是自动递增的,可以通过info b获取
delete删除所有断点
delete breakpoint(或者delete breakpoints)删除所有断点
delete breakpoint N(或者delete breakpoints N)删除标号为N的断点,标号是自动递增的,可以通过info b获取
clear 行号删除行号处的断点(delete是根据断点标号进行删除)
clear 函数名删除函数名处的断点
clear Refresh.cpp:120删除在文件Refresh.cpp的第120行的断点
display 变量名跟踪查看某个变量,每次停下来都显示它的值
undisplay  跟踪显示号取消跟踪显示
info display用于显示当前所有要显示值的表达式的情况
disable breakpoints N禁用标号为N的断点(执行info b后Enb字段标识断点状态,n为禁用,y为启用)
disable n1 n2禁用多个标号对应的断点,多个断点间用空格分隔
enable N启用标号为N的断点
enable n1 n2启用多个标号对应的断点,多个断点间用空格分隔
info breakpoints(或info b)查看当前设置的断点
run(或r)从头开始连续运行程序
watch 变量名设置一个观察点,当变量的值发生变动(即写入)时暂停程序
rwatch 变量名设置一个观察点,当变量被读出时暂停程序
awatch 变量名设置一个观察点,当变量被读出或写入时程序被暂停
info watchpoints N查看标号为N的观察点
whatis 变量名显示某个表达式的数据类型
return 返回值改变程序流程,直接结束当前函数,并将返回值返回
call 函数名在当前位置执行所要运行的函数
until在循环体内跟踪程序,直到整个循环结束
until  行号运行至指定行,可以用于跳出循环
set environment varname [=value]设置环境变量,如:set env USER=hchen
show environment [varname]查看环境变量
  
用gdb实时观察某进程crash信息 
gdb -p PID启动进程
c运行进程至crash,gdb会显示crash信息
  
core/堆栈相关命令 
backtrace(或bt)查看各级函数调用及参数
frame(或f)  帧编号选择栈帧
info reg查看寄存器使用情况
info stack查看堆栈使用情况
up/down跳到上一层/下一层函数
where显示当前线程调用堆栈
  
  
info inferiors查看进程
info threads查看所有线程列表
thread num切换线程
set scheduler-locking on设置只执行当前线程的函数
set scheduler-locking off
set print elements 0显示完整的字符串
set print pretty on格式化打印
p /x var 以16进制显示var的值
    x 16进制
    d 10进制
    t 二进制
    c 按字符格式显示变量
    f 按浮点数
print *a@10 //如果a是一个数组,这样显示数据的10个元素的值
print var=10 //修改运行时变量的值
whatis var //显示一个变量的类型
ptype var //更详细的方式显示变量var的类型,会打印出var的结构定义
4、编译的时候要加入-g选项,才可以对程序进行跟踪
core调试
1、$sudo gdb binpath corepath
2、bt 查看调用堆栈
3、f 5...假设断的代码在栈号为5这里
4、info locals 查看局部变量
5、info args 查看函数参数的值
6、info catch 查看异常
7、info r 查看寄存器
8、up,down切栈帧
手动生成core文件:
gcore pid (进程号)
//查看当前运行的进程
ps aux|grep a.out
//查看当前运行的轻量级进程
ps -aL|grep a.out
//查看主线程和新线程的关系
pstree -p 主线程id
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值