在Linux系统中使用GDB来调试C/C++程序的方法可以分为以下几个步骤:
1. 编译C/C++程序时添加编译选项
为了让程序在调试时保留符号表信息,需要在编译C/C++源代码时添加编译选项 -g。例如:
$ gcc -g -o myprog myprog.c
这样编译出来的可执行文件中就包含了符号表信息,可以用于调试。
2. 启动GDB调试器
在终端中输入以下命令,启动GDB调试器:
$ gdb myprog
myprog是你需要调试的可执行文件名。
3. 设置断点
在GDB命令行中输入以下命令,设置断点:
(gdb) break myfunc
其中myfunc是你需要设置断点的函数名,也可以设置在某个指定行上:
(gdb) break myprog.c:12
其中myprog.c是文件名,12是行号。
4. 运行程序
在GDB命令行中输入以下命令,运行程序:
(gdb) run
程序运行到断点处时会停止,并在GDB命令行中提示。
5. 进行调试
在程序停在断点处时,可以使用以下GDB命令进行调试:
next
命令执行当前行并停在下一行。step
命令单步执行当前行,如果当前行是函数调用,则进入函数并停在函数第一行。print
命令打印变量的值。backtrace
命令打印函数调用栈。continue
命令从当前位置继续执行程序。finish
命令执行到当前函数返回。
以下是一个示例:
(gdb) break main
(gdb) run
(gdb) next
(gdb) print var
(gdb) step
(gdb) backtrace
(gdb) continue
6. 退出GDB
在GDB命令行中输入以下命令,退出GDB:
(gdb) quit
示例1:对于如下的C++程序,我们需要使用GDB调试:
#include <iostream>
using namespace std;
int main()
{
int a = 123;
cout << "Hello, world!" << endl;
cout << "a = " << a << endl;
return 0;
}
第一步,编译程序时添加编译选项:
$ g++ -g -o myprog myprog.cpp
第二步,启动GDB调试器:
$ gdb myprog
第三步,设置断点:
(gdb) break main
第四步,运行程序:
(gdb) run
程序运行到断点处时会停止。
第五步,进行调试:
我们可以使用以下GDB命令进行调试:
(gdb) next
(gdb) print a
(gdb) continue
执行结果如下:
Breakpoint 1, main () at myprog.cpp:8
8 int a = 123;
(gdb) next
9 cout << "Hello, world!" << endl;
(gdb) print a
$1 = 123
(gdb) continue
Continuing.
Hello, world!
a = 123
Program exited normally.
示例2:对于如下的C程序,我们需要使用GDB调试:
#include <stdio.h>
int main()
{
int sum = 0, a, b;
printf("Enter two integers: ");
scanf("%d%d", &a, &b);
sum = a + b;
printf("The sum of %d and %d is %d\n", a, b, sum);
return 0;
}
第一步,编译程序时添加编译选项:
$ gcc -g -o myprog myprog.c
第二步,启动GDB调试器:
$ gdb myprog
第三步,设置断点:
(gdb) break main
第四步,运行程序:
(gdb) run
程序运行到断点处时会停止。
第五步,进行调试:
我们可以使用以下GDB命令进行调试:
(gdb) next
(gdb) next
(gdb) print sum
(gdb) continue
执行结果如下:
Breakpoint 1, main () at myprog.c:5
5 int sum = 0, a, b;
(gdb) next
7 printf("Enter two integers: ");
(gdb) next
Enter two integers: 1 2
8 scanf("%d%d", &a, &b);
(gdb) print sum
$1 = 0
(gdb) continue
The sum of 1 and 2 is 3
Program exited normally.
以上就是在Linux系统中使用GDB来调试C/C++程序的方法的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在Linux系统中使用GDB来调试C/C++程序的方法 - Python技术站