用VSCode调试C++代码的方法

本文参考【笔记】用VSCode调试C++代码的方法
并在此基础上修改一部分。

1、必要的插件

安装插件:C/C++,其作用是提供对接gdb的接口
在这里插入图片描述

2、配置.vscode

1 生成.vscode文件

1、打开源代码main.cpp,按 F5 ,然后选择第一项 C++ (GDB/LLDB)(图片来自参考

在这里插入图片描述2、然后选择 C/C++: g++.exe 生成和调试活动文件…(图片来自参考

在这里插入图片描述3、由于代码是分成多个文件,所以vscode不能直接处理,此时会报错(如果源文件只有一个main.cpp,那么这里就不会报错)。现在选择 打开"launch.json" ,并仍然选择 C++ (GDB/LLDB) ,你会发现生成了 .vscode ,并且这个文件夹下面有 launch.json 和 tasks.json 两个文件
在这里插入图片描述

2 配置 tasks.json

打开 tasks.json,将 “args”: [ … ] 中的 " f i l e " , 注释掉,并在下面添加一行 ∗ ∗ " {file}", 注释掉,并在下面添加一行 **" file",注释掉,并在下面添加一行"{workspaceFolder}//*.cpp",表示编译的文件是源文件main.cpp所在文件夹下的所有.cpp文件

然后注意一下这个 “label” 标签的值 “C/C++: g++.exe 生成活动文件” ,它是编译源文件这个任务的名称,下一步会用到。

另外也可以看看下面的的两个参数 “-o”, 和 “{fileDirname}\{fileBasenameNoExtension}.exe” ,这表示编译生成的可执行文件的名字,生成的位置在工作空间的build文件夹下。因此将 “{fileDirname}\{fileBasenameNoExtension}.exe"改为”${workspaceFolder}/build/ExtendedKF",目的是指明可调试的可执行程序的位置。

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ 生成活动文件",
            "command": "/usr/bin/g++",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                //"${file}",
                "${workspaceFolder}/**/*.cpp",//这一点是关键
                "-o",
                //"${fileDirname}/${fileBasenameNoExtension}"
                "${workspaceFolder}/build/ExtendedKF"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

3 配置 launch.json

打开 launch.json ,点击右下角的 添加配置 ,选择 C/C++: (gdb) 启动 。
在这里插入图片描述

在生成的代码中添加一行 “preLaunchTask”: “C/C++: g++.exe 生成活动文件”, ,这就是2中 tasks.json 那个 “label” 的值,“preLaunchTask” 代表预启动的任务,表示每次调试或运行之前就会先对源文件进行编译。

另外,你也可以选择不添加 “preLaunchTask”: “C/C++: g++.exe 生成活动文件”, ,这样的话,就需要运行程序前先对程序进行编译,编译的快捷键是 ctrl+shift+B ,然后才能 ctrl+F5 运行或 F5 调试。

在 launch.json 中,“program” 标签需要的参数是可执行文件的路径。在3.2中我们提到生成可执行文件的位置在工作空间的build文件夹下。因此,这里的 “program” 的值改为 “${workspaceFolder}/build/ExtendedKF”

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/ExtendedKF",
            "args": [
                "/home/liu/tracking-with-Extended-Kalman-Filter/data/sample-laser-radar-measurement-data-1.txt",
                "/home/liu/tracking-with-Extended-Kalman-Filter/output/output.txt"
            ],
            "stopAtEntry": false,
            "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
                }
            ],
            "preLaunchTask": "C/C++: g++ 生成活动文件"
        }
        

    ]
}

aunch.json 中的 “args”: [] 标签代表传递给程序的命令行参数,如果main()函数需要命令行参数,可以在这里添加。如上图所示,给main()函数传递了三个参数,分别为 “/home/liu/tracking-with-Extended-Kalman-Filter/data/sample-laser-radar-measurement-data-1.txt”,
“/home/liu/tracking-with-Extended-Kalman-Filter/output/output.txt”

至此,返回main.cpp,设置断点,F5就可以愉快地(bushi)调试代码了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值