VScode调试复杂C/C++项目

以前都是用的VScode调试c/cpp的单个文件的编译和执行, 但是一遇到大型项目一般就用gdb了, gdb的调试效率和VScode差距还是比较大的, 但最近发现VScode其实也能调试复杂的cpp项目, 所以记录一下.

首先明确一下几点:

  • 首先cpp文件需要经过编译, 生成可执行文件, 然后通过运行/调试可执行文件达到我们想要的效果
  • VScode中的task.json对应编译过程, launch.json对应调试过程
  • VScode中的Code Runner插件只能运行, 不能调试, 配置在settings.json中, 和以上两个文件是相对独立, 互不影响的关系

我们的复杂C++项目当然不是通过单文件编译获得, 而是多个文件相互调用, 链接之后编译形成的, 最后会生成一个可执行文件, 假设为main, (我使用的是Ubuntu, 可执行文件没有后缀名)

项目简易结构为:

|--build
    |--main
|--include
    |--头文件 
|--lib
    |--依赖库
|--src
    |--源代码
|--test
    |--测试文件

运行 

我们首先试着运行main, 建议使用VScode中的Code Runner插件, 基本上一家一个了, 不多说

VScode调试复杂C/C++项目_第1张图片

打开它的插件主页往后翻, 就能看到的他的详细配置过程:

VScode调试复杂C/C++项目_第2张图片

 具体配置在settings中:

"code-runner.executorMap": {
        "cpp": "cd $workspaceRoot/build && $workspaceRoot/build/main"
    },
"code-runner.defaultLanguage": "cpp",
"code-runner.saveFileBeforeRun": true,
"code-runner.runInTerminal": false,

这个配置不太常规, 因为我们要运行的只有main文件, 所以我设置了无论当前文件在哪, 都默认运行main文件

这样项目点击右上角的三角形, 选择run code, 就能跑起来了

调试

调试的话, 我们只需要launch.json文件就行了, 因为一般编译过程比较复杂, 我假装已经编译好了, 那么我们就不需要task.json文件, launch.json文件中也不不需要"preLaunchTask"(调试前在编译一次)

我们的launch.json如下:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/main", // 要调试的只有main文件
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "/usr/bin/gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            // "preLaunchTask": "build"
        }
    ]
}

我们这个调试项目的名称叫"(gdb) Launch", 这样我们点击右上角的调试C/C++文件, 然后选择任务"(gdb) Launch", 就开始调试了!

VScode的自定义功能远比我要想的强大

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