0、 前置步骤:
工具及环境:Ubuntu18.04、g++/gcc编译器、gdb调试器以及VS code中的CMake、CMake Tools插件。
1、前期设置
1.1 指定并编译需要调试的可执行文件
CMakeLists文件里需要将CMAKE_BUILD_TYPE改为Debug。
点击VS code左侧竖栏CMake的标志(CMake源文件查看器),可配置/生成所有项目。
Ctrl + Shift + P输入Set Build Target,选择CMake:Set Build Target,选择需要生成的目标可执行程序。
之后输入Set Debug Target,选择CMake:Set Debug Target,选择需要Debug的可执行程序。
执行完这些命令后,可以在 CMake 源文件查看器中看到指定的目标文件多了两个图标如下所示。
其中锤子表示是 build target;火箭表示是 debug target。设置完成后,按 F7 即可开始编译。
2、配置 launch.json 文件(若程序不需要从外部传递参数,可以跳过这一步)
点击“运行和调试”按钮(Ctrl + Shift + D),点击 “创建 launch.json 文件”,选择“C/C++(gdb)启动”。(注:如果没有这个选项,可以简单粗暴地在.vscode文件夹下新建launch.json文件)。
该文件有以下内容:(自己创建的可以将下方内容复制)
{
"version": "0.2.0",
"configurations": []
}
将光标移动到 “configurations:” 后的[]内,点击右下角的 “添加配置”,或键盘按下 Ctrl+空格,选择 “C/C++(gdb) 启动 ”。执行完成后 launch.json 文件的内容如下 (这和在前一步直接选择 “C/C++(gdb) 启动” 的内容一样),可能需要改的参数主要有:name、program、args、cwd,已经在下面做了注释:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
// 程序在 VSCode 中的名字,一般设置为“项目名-gdb”,如 “run_tum_rgbd-gdb”
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
// 指定可执行文件,需要包括可执行文件所在的目录以及可执行文件的名称。
//(注:这里的 ${workspaceFolder} 变量为当前打开的文件夹的路径,之后会用到)
"program": "输入程序名称,例如 ${workspaceFolder}/a.out",
// 启动时传入 main 函数的参数,每个参数须用双引号引起来,两个参数间需要用逗号隔开
"args": [],
"stopAtEntry": false,
// current work directory 的缩写。这个为程序运行的目录。
//(注:这里的 ${fileDirname} 是断点所在源文件的目录。一般在调试大型项目时用不到)
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
}
我的这四个参数设置如下:
"name": "run_tum_rgbd-gdb",
"program": "${workspaceFolder}/bin/run_tum_rgbd",
"args": ["files=/media/andyvictory/AndyVictory/Dataset/TUM/RGBD/rgbd_dataset_freiburg2_desk",
"calib=/media/andyvictory/AndyVictory/Dataset/TUM/RGBD/rgbd_dataset_freiburg2_desk/calib.txt"]
"cwd": "${workspaceFolder}/build"
3、设置断点,启动调试
使用鼠标在某行的左侧设置断点(或者按F9键)。之后按 F5 即可启动调试(如果跳过了第2步,可能需要按Ctrl + F5)。
可以看到左侧有变量、监视、调用堆栈、断点四个栏目。
变量栏目显示的是当前函数中的各个临时变量,以及各个寄存器的值(一般用不到)
监视栏目可以指定变量,在任何时刻都会显示其的值
调用堆栈栏目显示的是函数的调用关系。每调用一次堆栈就会高一截
断点栏目显示当前程序所有设置的断点位置
4、补充快捷键
F5:启动调试。若已经启动,则会运行到下一个断点停住
F10:单步跳过。即如果遇到函数,则不会进到这个函数里面
F11:单步执行。如果遇到函数,会进到这个函数里面
Shift+F11:直接执行完这个函数,返回调用的前一个函数
Shift+F5:结束调试
参考文章:https://blog.csdn.net/qq_51303289/article/details/128687710