VSCode调试C++代码的多种方案

以下内容均针对 Linux 操作系统。

本文是对Linux系统中使用VSCode编译调试C++代码的系列文章的总结,前面三篇文章如下:

  1. 详解C/C++代码的预处理、编译、汇编、链接全过程
  2. Linux环境使用VSCode调试简单C++代码
  3. Linux环境使用VSCode调试CMake工程

1. 根本逻辑

在VSCode中编译调试C++代码的本质逻辑:

  • tasks.json 指定如何 生成二进制可执行文件
    • 可以直接通过g++生成
    • 可以通过CMake生成
    • 也可以通过脚本.sh生成
  • launch.json负责配置gdb调试器,指定可执行文件名、命令行参数,以及预执行任务(prelaunchTask)

2. 方案一:直接g++生成可执行文件

具体过程在这篇文章中详细解释:Linux环境使用VSCode调试简单C++代码

3. 方案二:CMake生成可执行文件

具体过程在这篇文章中详细解释:Linux环境下使用VScode调试CMake工程

4. 方案三:shell脚本生成可执行文件

直接列出来 tasks.jsonlaunch.json文件:

tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ build active file",
            "command": "sh",
            "args": [
                "build_executable.sh"
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "compiler: /usr/bin/g++"
        }
    ]
}

脚本文件build_executable.sh的内容如下:

echo "Configuring and building ORB_SLAM3..."

mkdir build
cd build
# cmake .. -DCMAKE_BUILD_TYPE=Debug
cmake .. -Wno-dev
make -j8

launch.json

{
            "name": "g++ - debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++ build active file",
            "miDebuggerPath": "/usr/bin/gdb"
        

你可能感兴趣的:(vscode,c++,linux)