使用GDB调试程序的基本步骤如下:
启动GDB
在命令行中输入 `gdb` 后跟要调试的程序名称来启动GDB并加载程序。例如:
```
gdb ./my_program
```
设置断点
使用 `break` 命令在指定位置设置一个断点。例如,在 `main` 函数的第一行设置断点:
```
(gdb) break main
```
也可以使用行号设置断点:
```
(gdb) break 42
```
运行程序
使用 `run` 命令启动程序。例如:
```
(gdb) run
```
如果程序需要参数,可以在 `run` 命令后附加参数:
```
(gdb) run arg1 arg2
```
单步执行
使用 `next` 命令逐行执行代码,但不进入函数内部:
```
(gdb) next
```
使用 `step` 命令逐行执行代码,并进入函数内部:
```
(gdb) step
```
查看变量值
使用 `print` 命令查看变量或表达式的值。例如:
```
(gdb) print x
```
继续执行
使用 `continue` 命令从当前断点处继续执行程序,直到下一个断点或程序结束:
```
(gdb) continue
```
退出GDB
使用 `quit` 命令退出GDB:
```
(gdb) quit
```
编译程序时添加调试信息
为了使GDB能够正确调试程序,需要在编译时添加调试信息。使用 `gcc` 或 `g++` 编译时,需要添加 `-g` 选项:
```
g++ -g -o demo main.cpp
```
其他常用命令
查看源代码:
```
(gdb) list
```
设置程序运行参数:
```
(gdb) set args arg1 arg2
```
查看栈跟踪:
```
(gdb) bt
```
设置观察点:
监视变量:
```
(gdb) watch x
```
监视变量被读:
```
(gdb) rwatch x
```
监视变量被读或被写:
```
(gdb) awatch x
```
设置捕捉点:
```
(gdb) catch throw
```
通过以上步骤和命令,你可以有效地使用GDB进行程序调试。确保在编译程序时添加 `-g` 选项以包含调试信息,这将有助于GDB在调试过程中显示更多的上下文信息。