当前位置:   article > 正文

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

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"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

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++ 生成活动文件"
        }
        

    ]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

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)调试代码了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/65786
推荐阅读
相关标签
  

闽ICP备14008679号