vscode配置cpp调试环境

写在前面

虽然平日几乎用不到cpp,但还是想用cpp刷刷题。打算在vscode中配置cpp的调试环境。这篇文章说的是Mac的相关配置,如果是windows的可以参考其他文档。废话不多说,开始我们的cpp调试环境配置吧。

准备工作

基本的工作可以参考vscode的官方文档,里面有详细的配置,这里简述一下。

  1. 安装C/C++插件
  2. 添加c_cpp_properties.json配置文件
  3. 添加tasks.json配置文件
  4. 添加launch.json配置文件

安装C/C++插件

打开插件页面,搜索输入C/C++搜索C/C++插件。
vscode配置cpp调试环境
安装该插件后,使用vscode打开包含cpp文件的文件夹时,vscode会添加.vscode子文件夹到目录中。

添加c_cpp_properties.json配置

通过快捷键⇧⌘P运行C/Cpp: Edit configurations,添加缺失的c_cpp_properties.json文件。默认的添加的文件如下:

{
    "configurations": [
        {
            "name": "Mac",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [],
            "macFrameworkPath": [
                "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks"
            ],
            "compilerPath": "/usr/bin/clang",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "clang-x64"
        }
    ],
    "version": 4
}

这个部分没有做什么调整。采用的是默认添加的文件。

添加tasks.json配置文件

通过快捷键⇧⌘P选择执行的命令,选择Task: Configure Task命令,选择Create tasks.json from templates,选择Others来创建一个外部命令。根据自己的编译器更换commnd选项。

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "cpp",
            "type": "shell",
            "command": "g++",
            "args": [
                "-g",
                "${file}",
                "-o",
                "a.out"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

这里需要说一点,希望对当前标签页的代码进行编译执行,因此args参数中用的是${file}。另外需要说的一点是,如果不指定输出的编译文件,会影响调试。可以参考github上的一个issue。所以这里用的命令等于是(假设当前的文件是question.cpp):

>> g++ -g question.cpp -o a.out

当然也可以把args中的a.out替换为${file}保持和文件名的对应。

添加launch.json配置文件

在调试界面点击运行,会提示添加launch.json配置文件。其定义了启动调试文件的相关属性。

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(lldb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/a.out",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "lldb",
            "preLaunchTask": "cpp"
        }
    ]
}

这里需要说明的有三个参数:

  1. program参数,这里的文件名要和之前的保持对应,如果前面用的a.out,这里也应该是a.out。
  2. externalConsole参数,悬停在上面会有说道,如果是linux等系统,将其置为false时,将会在vscode集成内输出打印内容。如果是true的话,会在外部的终端输出。为了在vscode看输出,这里设置其为false.另一个需要留意的是参数externalConsole,悬停在上面会有说道,如果是linux等系统,将其置为false时,将会在vscode集成内输出打印内容。如果是true的话,会在外部的终端输出。为了在vscode看输出,这里设置其为false.
  3. preLaunchTask参数,因为每次调试都需要预先对代码进行编译,这里可以通过preLaunchTask参数指定编译任务。这里将其指定为之前的任务: cpp. 即之前task的label中的内容。

运行效果

如下是打断点调试的示例图:
vscode配置cpp调试环境
可以看到输出:
vscode配置cpp调试环境

写在最后

其实来来回回配置了好几次vscode的cpp调试环境(每换一个工作目录就要重新配置一次),基本上都是到处搜索博客。现在自己记录下来,也省的再乱搜了。