使用GDB调试程序的基本步骤如下:
编译程序时启用调试信息
在编译时添加 `-g` 选项,以便生成调试信息。例如,使用 `g++ -g -o program main.cpp` 编译源代码文件 `main.cpp`。
启动GDB
在命令行中输入 `gdb` 命令,并跟上要调试的程序名,即可启动GDB。
设置断点
使用 `break` 命令在指定位置设置断点。例如,`break main` 会在 `main` 函数处设置断点,`break 10` 会在第10行设置断点。
运行程序
使用 `run` 命令启动被调试的程序。程序会在设置的断点处暂停执行。
单步执行
使用 `step` 命令逐行执行程序,进入函数内部;使用 `next` 命令单步执行程序,但不进入函数内部。
查看变量和内存
使用 `print` 或 `p` 命令查看变量的值,例如 `print x` 查看变量 `x` 的值;使用 `x` 命令查看内存的内容。
调用堆栈跟踪
使用 `backtrace` 或 `bt` 命令查看程序的调用堆栈,了解程序的执行流程。
修改变量值
在程序运行时,可以使用 `set` 命令修改变量的值,例如 `set {int}x = 20` 将变量 `x` 的值修改为20。
继续执行
使用 `continue` 或 `c` 命令从当前断点处继续执行程序,直到下一个断点或程序结束。
退出GDB
使用 `quit` 命令退出GDB。
示例
假设我们有一个简单的C++程序 `main.cpp`:
```cpp
include
int add(int a, int b) {
return a + b;
}
int main() {
int x = 5;
int y = 10;
int result = add(x, y);
std::cout << "The result is: " << result << std::endl;
return 0;
}
```
编译程序
```sh
g++ -g -o demo main.cpp
```
启动GDB
```sh
gdb ./demo
```
设置断点
```sh
break main
```
运行程序
```sh
run
```
单步执行
```sh
next
```
查看变量值
```sh
print x
print y
```
继续执行
```sh
continue
```
退出GDB
```sh
quit
```
通过以上步骤,你可以使用GDB调试程序,检查程序的执行流程,查看和修改变量的值,从而定位和修复程序中的错误。