文章目录
gdb
GDB(GNU Debugger)
是GCC
的调试工具。
一、生成调试的可执行文件
一般来说GDB
主要调试的是C/C++的程序
。要调试C/C++
的程序,首先在编译时,我们必须要把调试信息加到可执行文件中。使用编译器(gcc/g++)
的 -g 参数可以做到这一点。如:
gcc -g hello.c -o hello
g++ -g hello.cpp -o hello
如果没有-g,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。当你用-g把调试信息加入之后,并成功编译目标代码以后,让我们来看看如何用gdb来调试他。
二、启动gdb
-
gdb 可执行程序
-
gdbtui 可执行程序/gdb -tui 可执行程序
三、查看源代码
list
命令来打印程序的源代码,默认打印10行。list简写为l
l 行号(函数名)
l filename:行号(函数名)
四、设置断点
break
设置断点,可以简写为b
4.1、设置当前文件断点:
b 行号(函数名)
4.2、设置指定文件断点
b filename:行号(函数名)
4.3、设置条件断点
b 文件名:行数 if 变量名 = 值
4.4、删除断点
delete 设置断点,可以简写为d
d 断点的编号
获取编号:info break 简写(i b)
五、查看设置的断点
info break 简写(i b)
六、开始 执行gdb调试
- 执行一步操作:
start
- 执行多步,直接停在断点处:
c ---- continue
----直接停在断点位置
七、单步调试
7.1、进入函数体内部:
s ---- step(单步)----可以进入函数体内部
从函数体中跳过:finish
7.2、不进入函数体内部:
n ---- next(单步) ----跳过此函数体内部
退出当前循环: until
,可以简写为u
八、查看运行时的数据
-print 打印变量、字符串、表达式等的值,可简写为p
p 变量名 //打印十进制
p/x 变量名 //打印十六进制
p/t 变量名 //打印二进制
九、查看变量的类型
ptype 变量名
十、设置变量的值
set var 变量名=赋值
十一、追踪变量
- 设置追踪变量
display 变量- 取消追踪变量
undisplay 编号
获取编号:info display
十二、退出gdb调试
quit