gdb 调试命令

note:编译程序的时候需要增加-g选项,增加调试信息
1.启动GDB
gdb只是装载了程序,并没有运行,gdb默认启动后会显示gdb的版权信息,如果不想看版权信息可以增加-q选项。

2.退出GDB

q 或 quit

3.调试程序有两种方式:

(1)gdb -q test
(2)gdb -q
     file test

4.退出调试

kill

5.查看调试文件源码:list

list:显示开始的10行代码
list 5,10 显示第5到第10行的代码
list func 显示行数func周围的代码,以函数func为中心
list xxx.c:5,10 显示xxx.c 文件的5-10行代码
list xxx.c:func 显示xxxx.c 文件func函数周围的代码,一函数func为中心

6.设置断点:breakpoint或者watch

b 行号或者函数名或者(xxx.c:func)。
eg:b 12 //12行打断点 
eg:b get_sum  //函数get_sum打断点
eg:b test.cpp:get_sum //test.cpp 中的get_sum 打断点

b 行号或者函数名或者(xxx.c:func)if 条件表达式

eg b 12 if i==20 //当i=20的时候触发断点

watch 条件表达式不需要函数名或者行号,根据当前运行环境来决定 (note:当条件表达式的值发生改变的时候出发断点,并不是条件表达式为真或者为假)

eg watch i==20 //当i==20条件表达式的值发生改变的时候出发断点

7.查看所有断点info breakpoint

eg info b //显示所有断点详细信息

8.删除断点clear或者delete
clear 行号或者函数名对应b打断点的方式

eg clear 12 //删除12行的断点
eg clear get_sum //删除get_sum 的断点

delete 断点的序号,如果不填写则删除所有断点

eg delete //删除所有断点
eg delete 1 //删除断点序号为1的断点(序号从断点列表可以得知)

9.禁用启动断点disable或者enable

disable 断点序号
eg disable 1//禁用断点序号为1的断点`

enble 断点序号
eg enable 1//启动断点序号为1的断点

10.查看调试信息

 a.查看变量信息:p(print) 变量 eg:p i
 b.查看变量数据类型:whatis 变量 打印变量或者表达式数据类型 eg:whatis i
 c.查看变量类型的具体定义:ptype 变量或者类型 eg:ptype i
 d.设置变量值: set variable 变量 = val eg: set variable i=10  设置i=10`
 e.当前作用域内一直显示该变量:display variable(p指令只显示一次),取消使用undisplay 序号

11.查看调用堆栈

#bt或者where都可以
bt:backtrace 
where:Print backtrace of all stack frames, or innermost COUNT frames.

在这里插入图片描述
12.查看具体帧的调用信息

#f Num,Num 即bt列出的帧序号#0 #1等,f是frame的简写
f 0

在这里插入图片描述
13.查看汇编

disassemble

在这里插入图片描述

14.单步调试

n:next  执行下一指令如果是函数不会进入函数,函数当做一条指令
s:step  执行下一指令如果是函数则进入函数
fin:finish 跳出当前执行函数
ni:nexti  (汇编指令)执行下一机器指令*如果是函数不会进入函数
si:stepi  (汇编指令)执行下一步指令如果是函数则进入函数
c:continue 继续运行直至下一断点

15.多线程调试

#列出当前进程的线程id,最前面的为当前线程序号
info thread
#切换到指定序号的线程调试
thread seq

16.gdb获取帮助信息

#gdb模式输入help 具体指令(可选)
help

在这里插入图片描述

17.调试步骤
1.启动gdbgdb -q test
2.浏览源文件设置断点 list和b
3.开始调试run
4.单步调试
5.查看变量信息
6.跳转到下一断点c(continue)
7.结束调试kill或者重新调试run
8.退出gdbq(quit)

18.调试子进程(fork)
set follow-fork-mode [parent|child]
parent: fork之后继续调试父进程,子进程不受影响。
child: fork之后调试子进程,父进程不受影响。
启动gdb:
gdb) set follow-fork-mode child

set detach-on-fork [on|off]
on: 断开调试follow-fork-mode指定的进程。
off: gdb将控制父进程和子进程。follow-fork-mode指定的进程将被调试,另一个进程置于暂停(suspended)状态。

19.调试core
core.xxx core文件往往以core+进程id构成文件
app 运行程序名称

gdb -c core.xxx app
whereis 或者 bt 查看崩溃位置
关于更多core调试请查看:Core基本调试 查看core dumped的详细错误原因

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值