在Linux系统中,使用GDB(GNU调试器)进行程序调试的基本步骤如下:
编译程序时添加调试信息
在编译源代码时,必须使用`-g`选项来生成带有调试信息的可执行文件。例如,使用`gcc -g -o my_program my_program.c`来编译名为`my_program.c`的源代码,并生成名为`my_program`的可执行文件。
启动GDB
在终端中输入`gdb`命令,然后输入要调试的可执行文件的路径。例如,在Ubuntu主机上运行`gdb ./my_program`来启动GDB并加载程序。
设置断点
使用`break`命令在指定位置设置断点。位置可以是行号、函数名或文件名+行号。例如,`break main`在`main`函数开始处设置断点,`break myfunction`在`myfunction`函数开始处设置断点,或者`break myprogram.cpp:10`在文件`myprogram.cpp`的第10行设置断点。
运行程序
使用`run`或`r`命令启动程序的执行。可以带参数,例如`run arg1 arg2`。程序会在达到第一个断点处暂停。
单步执行
使用`step`或`s`命令单步执行程序,进入函数内部。使用`next`或`n`命令单步执行程序,但不进入函数,直接执行到下一行。
查看变量的值
使用`print`或`p`命令打印指定表达式的值。例如,`print myVar`打印变量`myVar`的值。
继续执行
使用`continue`或`c`命令从当前断点处继续执行程序,直到下一个断点或程序结束。
跳出循环
使用`finish`命令继续执行当前函数直到返回,并显示返回值。
查看调用栈
使用`backtrace`或`bt`命令查看当前的函数调用栈。
条件断点
可以设置条件断点,以便只在满足特定条件时暂停程序的执行。例如,`break 10 if value==19`。
修改变量的值
使用`set`命令修改变量的值。例如,`set myVar = 10`。
退出GDB
输入`quit`命令来退出GDB。
示例
假设你有一个名为`my_program`的程序,并且已经在Ubuntu主机上编译好,添加了调试信息。你可以按照以下步骤进行调试:
1. 启动GDB:
```sh
gdb ./my_program
```
2. 设置断点:
```sh
break main
```
3. 运行程序:
```sh
run
```
4. 单步执行:
```sh
step
```
5. 查看变量的值:
```sh
print myVar
```
6. 继续执行:
```sh
continue
```
7. 退出GDB:
```sh
quit
```
通过这些步骤,你可以有效地使用GDB进行Linux程序调试。