Skip to content
On this page

VSCode 下使用 GDB 调试

单文件调试

.vscode 目录下创建 tasks.jsonlaunch.json 文件,配置如下:

tasks.json 文件:

json
{
  "tasks": [
    {
      "type": "cppbuild",
      "label": "compile", // 该任务的名称
      "command": " g++",
      "args": [
        "-g",
        "${file}",
        "-o",
        "${fileDirname}/${fileBasenameNoExtension}" // 可执行文件的路径
      ],
      "options": {
        "cwd": "${fileDirname}"
      },
      "problemMatcher": ["$gcc"],
      "group": {
        "kind": "build",
        "isDefault": true
      }
    }
  ],
  "version": "2.0.0"
}

launch.json 文件:

json
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "debug",
      "type": "cppdbg",
      "request": "launch",
      "program": "${fileDirname}/${fileBasenameNoExtension}", // 要调试的程序名称,要和前面对应
      "args": [], // 调试时的命令行参数
      "stopAtEntry": false,
      "cwd": "${fileDirname}",
      "environment": [],
      "externalConsole": false, // 调试时是否需要弹出外部终端
      "MIMode": "gdb",
      "miDebuggerPath": "gdb",
      "setupCommands": [
        {
          "description": "为 gdb 启用整齐打印",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ],
      "preLaunchTask": "compile" // 对应 task.json 里面的 "label" 值
    }
  ]
}

多文件项目调试

可以有两种方式,如果希望像单文件一样通过 VSCode 编译后调试,需要修改 task.json 里面的参数,先把 $file$ 去掉,防止重复链接,再加上所有需要编译的 .cpp 文件和包含的头文件位置,如下:

json
"args": [
    "-g",
    "-std=c++17",
    "-I",
    "${workspaceFolder}/incl",
    "${workspaceFolder}/src/*.cpp",
    "-o",
    "${workspaceFolder}/build/${workspaceFolderBasename}"
],

之后再修改 launch.json

json
"program": "${workspaceFolder}/build/${workspaceFolderBasename}",

也可以选择使用 Make 编译,这样 tasks.json 里的 command 无论单文件还是多文件都可以直接写 make,也不需要提供 args