Linux调试器-gdb使用
GDB(GNU调试器)是一个在多种操作系统(包括Linux)上使用的功能强大的调试器。它允许开发者对程序进行调试,以便找出程序中的错误、理解程序的执行过程和进行性能分析。
程序的发布有两种,debug和release,而Linux gcc/g++出来的二进制程序,默认是release模式,release是无法使用gdb的,只有debug模式下才可以,使用gdb调试,必须在源代码生成二进制程序的时候,加上-g选项。
1 #include <iostream>
2
3 using namespace std;
4
5 int Sum(int i)
6 {
7 int sum = 0;
8 for (int j = 0; j <= i; j++)
9 {
10 sum += j;
(gdb)
11 }
12 return sum;
13 }
14
15 int main()
16 {
17 int i = 0;
18 i = 3;
19 int ret = Sum(i);
20
(gdb)
21 cout << ret << endl;
22
23 return 0;
24 }
- 如何进入gdb调试模式?
gdb 可执行程序(不是源代码)
- 如何退出gdb模式?
输入q或者ctrl+d退出
- 进入gdb之后不会自动的显示代码,需要手动输入指令
list / l 行号:显示yuan'dai'ma
gdb会自动的记录上次使用的命令,按下回车可继续执行
- r / run:运行程序
- 在调试的时候,要设置断点进行调试:break(b)+行号 在某一行设置断点
-
删除断点:delete breakpoints(删除所有断点)
-
删除某一个断点:delete breakpoint n
-
break 函数名:在某个函数开头设置断点
-
在打完断点之后可以按r开始执行程序,在输入n/next 就可以单条执行
- 在调试的过程中碰到函数,输入n会直接把函数当成一条语句执行,不会进入函数,这个时候就需要输入s/step:进入函数调用
- info break 查看断点信息
- 当函数体里面的循环过多时,可以考虑使用finish:执行到当前函数返回,然后停下来,等待命令
- print 变量:打印值
- continue / c 从当前位置开始连续而非单步执行程序,也就是根据断点执行
- disbale breakpoings 禁用断点
- enable breakpoints 启用断点
- info breakpoints:查看当前设置了哪些断点
- display 变量名:跟踪查看一个变量
- undisplay:取消对先前设置的那些变量的跟踪
- breaktrace/bt 查看各级函数调用及参数
- info (i)locals 查看当前栈帧局部变量的值
- quit:退出gdb