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

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

首先明确一下几点:

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

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

项目简易结构为:

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

运行 

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

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

 具体配置在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文件就行了, 因为大项目的编译过程比较复杂, 一般都是用cmake等实现的, 我假设已经编译好了, 所以我们就不需要tasks.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", 就开始调试了!

如果调试时断点不起作用, 一般是编译的问题, 并非调试配置不对(否则调试就报错了)

如果是gcc/g++, 需要加-g参数

如果是cmake, 需要加 SET(CMAKE_BUILD_TYPE "Debug")

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

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值