什么是gdb调试
GDB(全称:GNU Debugger)是GNU工程为GNU操作系统开发的调试器。它可以用于调试C、C++、Objective-C、Pascal、Ada等语言编写的程序。
GDB的使用条件
程序要用GDB调试,需要添加调试信息。
gcc *.c -o app -g[-g用于添加调试信息]
1. 启动gdb
gdb + 【需要调试的程序】
start – 只执行一步
n – next
s – step(单步) – 可以进入到函数体内部
c - continue – 直接停在断点的位置
2. 查看代码:
l – list(默认10行)
l 10(函数名)
l filename:行号(函数名)
3. 设置断点:
设置当前文件断点:
b – break
b 10(函数名)
b fileName:行号(函数名)
设置条件断点:
b 10 if value==19
删除断点:
delete – del - d
d 断点的编号
4. 查看设置的断点
获取编号: info – i
info b
num:几号断点
type:什么了类型的断点
enb:当前断点状态
5. 开始 执行gdb调试
执行一步操作: s – step(单步) – 可以进入到函数体内部
继续执行:n – next
执行多步, 直接停在断点处:c - continue – 直接停在断点的位置
6. 单步调试
进入函数体内部: s
从函数体内部跳出: finish(想要停止执行,应该先去除断点)
不进入函数体内部:n
退出当前循环: u
7. 查看变量的值:
p – print
8. 查看变量的类型:
ptype 变量名
9. 设置变量的值:
set var 变量名 = 赋值
10. 设置追踪变量
display
取消追踪变量
undisplay 编号
获取编号: info display
11. 退出gdb调试
quit
12.常用gdb指令
file 装入想要调试的可执行文件
kill 终止正在进行的调试程序
list/l 列出产生执行文件的源代码的一部分
next/n 执行一行源代码但不进入函数内部
step/s 执行一行源代码并可以进入函数内部
run/r 执行当前被调试的程序
c 继续运行程序
quit/q 终止gdb
watch 使你能监视一个变量的值而不管它何时被改变
backtrack 栈跟踪,查看代码被谁调用
print/p 查看变量的值
make 不用退出gdb,就可以重新生成可执行文件
shell 不用退出gdb,就可以使用shell命令
whatis 显示变量或者函数类型
break/b 设置断点
info/i break/b 显示当前断点信息,包含到达断点处的次数
info/i files 显示被调试文件的详细信息
info/i func 显示所有函数名称
info/i local 显示当前的函数的局部变量
info/i prog 显示被调试程序的执行状态
delete/del [n] 删除第n个断点
disable [n] 关闭第n个断点
enable [n] 开启第n个断点
ptype 显示结构定义
set variable 设置变量的值
call name(args) 调用并执行为name,参数为args的函数
Finish 终止当前函数并输出返回值
return value 停止当前函数并返回value给调用者