本人一直使用Xcode和CLion编写C和C++的程序,因为Mac上VSCode的环境一直配置不好,要么无法运行要么无法调试。在我终于弄懂了如何配置VSCode环境后,决定分享一下我的操作过程。

如果你的Mac也无法成功用VSCode写c或cpp,或者配置中有一些问题,那这个教程就是为你而来。

备注一下我的电脑情况:Intel 的 MacBook Pro, macOS Catalina 10.15.7



Contents

  • clang、lldb等命令行工具的安装
  • VSCode的安装
  • VSCode的环境配置与基础操作
  • 手动编译运行一个程序
  • 一键编译运行——coderunner的配置
  • 断点调试——tasks.json和launch.json的配置
  • 一些VSCode插件推荐



clang、lldb等命令行工具的安装

在终端里输入clang --versionlldb --version 看一下是不是装好了gcc、g++(编译器)和lldb(调试器)。

Xcode支持iOS17真机调试包 xcode如何调试c程序_vscode

如果出现command not found,说明还没有装好,请去APP store下载Xcode。Xcode带有很多很多的命令行工具,包括上面的这些。注意Xcode的体积约12GB,如果你不想下载这么大的软件,也可以按照提示仅下载Command line tools,体积会小很多。

VSCode的安装

官网下载安装visual studio code. 略。

Xcode支持iOS17真机调试包 xcode如何调试c程序_json_02

VSCode的环境配置与基础操作

手动编译运行一个程序

打开vscode,你会看到这样的界面

Xcode支持iOS17真机调试包 xcode如何调试c程序_json_03


左边的边栏上,这几个按钮的功能如下:

Xcode支持iOS17真机调试包 xcode如何调试c程序_debug_04

我们随便打开或者新建一个文件夹。这里我在桌面上新建了一个名为「c」的文件夹,里面写了一个hello world。

Xcode支持iOS17真机调试包 xcode如何调试c程序_Xcode支持iOS17真机调试包_05


程序写完了,如何编译运行呢?首先command + S保存(不要忽略保存这一步),然后在下面的终端中(按command+J可打开底栏),输入 g++ Helloworld.cpp -o Helloworld 编译,再输入./Helloworld运行程序。

Xcode支持iOS17真机调试包 xcode如何调试c程序_c++_06

可以看到这段程序已经成功运行。但是,手输这两句命令是不是太烦了?如何一键运行?我们需要安装一个插件——coderunner.

一键编译运行——coderunner的配置

下载插件coderunner。这样vscode的右上角会出现运行按钮,点击即可自动编译运行,省去了手输g++ xxx.cpp -o xxxg++ xxx.cpp -o xxx -W -Wall -O2 -std=c++17等命令的麻烦。

Xcode支持iOS17真机调试包 xcode如何调试c程序_vscode_07


Xcode支持iOS17真机调试包 xcode如何调试c程序_debug_08


需要注意的是,要在coderunner的设置中把Run in terminal打开(如果不打开,程序运行结果会在’output‘中显示,output是只读的,会导致无法scanfcin等)。另外强烈建议把save file before run打开,防止没有先保存再运行导致错误结果。

Xcode支持iOS17真机调试包 xcode如何调试c程序_debug_09


建议在当前工作区新建一个.vscode文件夹,里面新建一个settings.json,复制上去一下内容。

settings.json

我的settings.json 内容

{
    "code-runner.executorMap": {
        "cpp": " cd $dir && g++ $fileName -o $fileNameWithoutExt -W -Wall -std=c++17 &&  ./$fileNameWithoutExt",
        "c"  : " cd $dir && gcc $fileName -o $fileNameWithoutExt -W -Wall -std=c17 &&  ./$fileNameWithoutExt",
    },
    "code-runner.clearPreviousOutput": true,
    "code-runner.saveAllFilesBeforeRun": false,
    "code-runner.saveFileBeforeRun": true,
    "code-runner.showExecutionMessage": true,
    "code-runner.runInTerminal": true,
    "code-runner.preserveFocus": false,
    "code-runner.ignoreSelection": true,
    "launch": {
        "configurations": [],
        "compounds": []
    }
}

上面这个json可以更改一些coderunner的设置,包括运行代码的命令等。

但是coderunner只能运行,不能调试,打断点没有任何效果。如果要调试的话,我们需要手动配置一些东西,这些“东西”就是下面要说的—— tasks.jsonlaunch.json.

断点调试——tasks.json和launch.json的配置

现在,我们给刚才的程序打上断点,然后在左侧边栏中的调试按钮乱点一通,可能会发现始终无法调试。(因为VSCode给的默认配置不太好使)

Xcode支持iOS17真机调试包 xcode如何调试c程序_vscode_10

为了调试,首先我们要下载一个插件 CodeLLDB

Xcode支持iOS17真机调试包 xcode如何调试c程序_Xcode支持iOS17真机调试包_11

我们在工作区的.vscode文件夹内(如果没有的话就新建一个),新建两个名为 tasks.jsonlaunch.json 的文件。

Xcode支持iOS17真机调试包 xcode如何调试c程序_Xcode支持iOS17真机调试包_12

把下面这些内容复制上去。(有空的时候我会更新详解一下这些配置文件有什么用、为什么要这样写,不过现在,你先不要管这是什么,先复制上去)

launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "lldb",
            "request": "launch",
            "name": "cpp debug",
            "preLaunchTask": "g++ compile",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            // "environment": [], // 放置环境变量
            "cwd": "${workspaceFolder}",
        }
    ]
}

tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "g++ compile",  //(这个label随便设置都可以,会显示在选项里)
            "type": "shell", // shell: 输入命令
            "command": "cd $dir && g++ $fileName -g -o $fileNameWithoutExt -W -Wall -std=c++17 &&  ./$fileNameWithoutExt",
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "echo": true, 
                "reveal": "silent",
                "focus": false, 
                "panel": "shared", 
                "showReuseMessage": true, 
                "clear": false
            },
            "options": {
                "cwd": "${workspaceFolder}" 
            },
            "problemMatcher": {
                "owner": "cpp",
                "fileLocation": "absolute",
                "pattern": {
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            }
        },
    ]
}

保存好这两个json配置文件之后,在vscode左边边栏的“调试”中,应该就能看到cpp debug的字样。

Xcode支持iOS17真机调试包 xcode如何调试c程序_vscode_13

点击那个cpp debug旁边的运行按钮,等着。

不出意外的话,程序会卡在断点处。

Xcode支持iOS17真机调试包 xcode如何调试c程序_c++_14

这样我们就可以调试程序啦!

Xcode支持iOS17真机调试包 xcode如何调试c程序_vscode_15

在左侧会显示变量的值,如果需要关注某个变量,可以将其添加到’watch‘。可以使用上方的箭头按钮,也可以用快捷键F5(continue)、F11(单步运行)、Shift+F11(单步跳过)等控制调试。

一些VSCode插件推荐

首先是一些必备插件

刚才讲过的CodeRunnerCodeLLDB.

Xcode支持iOS17真机调试包 xcode如何调试c程序_Xcode支持iOS17真机调试包_16


Xcode支持iOS17真机调试包 xcode如何调试c程序_vscode_17

C/C++

Xcode支持iOS17真机调试包 xcode如何调试c程序_Xcode支持iOS17真机调试包_18

美化代码,让代码语法高亮更加准确的插件:Better C++ Syntax

Xcode支持iOS17真机调试包 xcode如何调试c程序_debug_19


Beautify

Xcode支持iOS17真机调试包 xcode如何调试c程序_c++_20


让多个括号(比如 {{},(({},[]))}{[()]})能够以多彩颜色显示的插件 Bracket pair colorizer 2

Xcode支持iOS17真机调试包 xcode如何调试c程序_debug_21

我个人比较喜欢的主题 One Dark Pro

Xcode支持iOS17真机调试包 xcode如何调试c程序_vscode_22

(现在是凌晨00:52,暂时不写了,未完待续)

THE END