使用GDB调试工具调试C++代码


在windows下,我们有一套微软提供的集成开发工具,可以便捷的对C++代码进行调试。可是,在实际的工作中,我们也常常需要在linux下进行调试,这时候,我们就需要使用GDB调试工具了。

1. GDB简介

GDB是GNU项目的一个开源调试工具,它可以让我们在linux下进行C/C++代码的调试。GDB的全称是GNU Project Debugger,它是一个基于命令行的调试工具,它可以让我们在程序运行时,查看程序的运行状态,以及程序的运行过程中的变量的值。GDB的使用非常简单,只需要在命令行中输入gdb命令,然后再输入程序的路径,就可以进行调试了。

gdb ./xxx # xxx为要测试的程序的路径

常见的linux发行版中,基本都已经安装了GDB调试工具,我们可以直接使用。
如果不确定有没有安装,可以使用如下命令进行安装:

gdb -version # 查看GDB的版本 确定是否安装
sudo apt-get install gdb # 安装GDB
# 或者
sudo yum -y install gdb # 安装GDB

GDB的主要功能是监控程序的执行流程,以排除代码中的逻辑错误。GDB调试的对象是已经编译成可执行文件的程序,而不是源代码。但是,不是所有的可执行文件都可以用GDB工具进行调试,只有在编译时,包含了必要的调试信息的可执行文件,才可以用GDB进行调试。如果没有添加调试信息,GDB将无法找到源文件,也就无法进行调试了。
因此,在进行编译时,我们需要使用-g选项,来生成调试信息。

g++ -g xxx.cpp -o xxx # 编译时,使用-g选项,生成调试信息

在实际工作中,常用的c++编译方式是使用cmake进行编译,我们需要在CMakeLists.txt中添加如下代码:

set(CMAKE_BUILD_TYPE "Debug") # 设置编译模式为Debug

对于一个可执行程序test,我们可以用如下指令启动GDB进行调试。

gdb ./test
# 若程序需要传入参数,可以使用如下指令
gdb ./test --args arg1 arg2 arg3

2. GDB常用命令

在调试一个程序时,我们最常见的想法就是打个断点,观察程序运行到某个地方的时候,变量的值是多少。GDB提供了如下命令来设置断点:

(gdb) break [function|filename:line|*address] # 设置断点
(gdb) break 10 # 在第10行设置断点
(gdb) break main # 在main函数中设置断点
(gdb) break test.cpp:10 # 在test.cpp文件的第10行设置断点
(gdb) break *0x400000 # 在地址为0x400000处设置断点

在设置断点后,我们可以使用如下命令来查看当前的断点:

(gdb) info break # 查看当前的断点

设置好断点之后,我们就可以开始调试了。我们可以使用如下命令来运行程序:

(gdb) run # 运行程序 程序会自动运行到第一个断点处

也可以使用如下命令来逐行运行程序:

(gdb) next # 逐行运行程序

在程序运行到断点处,我们可以使用如下命令来打印指定变量的值:

(gdb) print [variable] # 打印变量的值

我们也可以使用如下命令来查看源代码的内容:

(gdb) list # 查看源代码

在调试结束之后,可以使用如下指令退出调试

(gdb) quit # 退出调试

上述所有操作均可以使用首字母缩写来代替,如break可以使用b来代替,next可以使用n来代替。


文章作者: 李垚
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 李垚 !
评论
  目录