允许调试
编译时添加参数
g++ -g source.cpp -o test
开始调试
在命令行输入gdb test
test是生成的可执行文件
查看源码
使用list命令,通常使用缩写 l
-
l
默认每次显示10行
-
l 行号
以行号为中心,展示上下10行代码
- l 函数名
将显示函数在的源码
断点
设置断点
-
break n
在第N行设置断点。可以使用b n
-
b 函数名
在函数入口处设置断点
上图在71行设置了断点,在main函数入口处设置了断点
查看断点
-
info b
查看断点的设置情况
可以看到一共设置了两个断点
删除断点
-
delete 断点号n
删除第n个断点
删除一个断点后,只有一个断点
-
disable 断点号n
暂停第n个断点
看到第一个断点的enb状态改变
-
enable 断点号n
开启第n个断点
1号断点的状态重新变成了y
-
delete breakpoints
删除所有断点
调试
- run(r)
运行程序,会在断点处停下
- continue (c)
继续执行,运行到下一个断点或者结束
- next (n)
单步运行。如果遇到函数调用,不进入函数,直接执行函数
- step (s)
单步调试如果有函数调用,那么将进入函数体执行
- quti (q)
退出gdb调试
打印
-
print(p) exp
打印表达式exp
-
p a
显式a 的值
- display exp
每次单步调试后,展示exp的值
看到每次n后,都会展示i 的值
- undisplay exp
取消打印exp的值
运行信息
-
bt
查看当前运行的堆栈列表
从堆栈信息中,看到,目前执行func1函数。func1的栈帧编号是0,main函数的栈帧编号是0。同时也能看到传递进来的参数有值。
-
i locals
查看局部变量
- frame 栈帧编号
切换栈帧
此时可以查看main函数中的局部变量
窗口
-
显示源代码窗口
layout src