0%

使用 VSCode 在 Mac 上配置 C/C++ 调试环境

Background

VSCode是微软开发的一款开源代码编辑器,具有可拓展性强,多语言支持,跨平台等优点,在不同的个性化配置下几乎可以用作所有的轻量级开发。我在初学C的时候也使用的是类似于Xcode、Visual Studio等大型IDE来新建一个C语言工程,编写一个仅含有main函数的文件,显得过于大材小用了。后来学校推荐使用的Code::Blocks和Dev C++也已经多年没有更新,且界面古老,对Mac的支持也很差。直到使用了VSCode并正确配置了之后,我似乎找到了当下最适合用于学习C/C++的代码编辑器。

下载与安装

https://code.visualstudio.com/

配置调试环境

首先你需要在你的硬盘上新建一个文件夹用于存放你的代码文件。我这里使用的是LearningRepo。在新建一个C或者C++文件后会自动提示安装Extension For C/C++ Support。你也可以在插件页手动安装。如果你喜欢中文界面,直接在插件中搜索Chinese就可以得到中文语言支持。

此时你已经可以新建代码文件并编辑。但为了能在终端中直接调试代码,我们还需要配置Launch.json和task.json。

配置 launch.json

进入左侧的调试页面,选择[添加配置...],就会自动在你的工作目录下新建一个.vscode文件来存放你的调试配置。这里我们选择C/C++: (lldb) Launch。

对于这里的配置,官方的文档里( https://go.microsoft.com/fwlink/?linkid=830387 )有详细的说明。对于一般用户,我在这里修改成了如下配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
 {
"preLaunchTask": "build c++",
"name": "Launch C++",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/temp/${fileBasenameNoExtension}.out",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "lldb",
}
大部分保持默认,需要修改的地方如下:

preLaunchTask:手动添加的参数,稍后我们会自行编辑的一个任务,其作用是将当前文件编译成可执行文件。

program:需要和稍后配置的task相对应,即打算运行的程序。需要设置为二进制程序目录而不是源代码文件。

externalConsole:设置为true来在外置终端(macOS自带的)中运行程序。该选项设置为false的话会在内置终端中运行,无法输入数据(应该有解决方法,但我目前没有发现)

如果你需要打开日志来排查问题,加入以下内容:

        "logging": {
            //   "engineLogging": true,
            "trace": true,
            "traceResponse": true,
        }

这个运行任务的意思就是首先运行一个build c++的task来,得到可执行文件,接着再运行并调试这个文件。

配置 task.json

对于默认快捷键,点击command+P并输入>task来新建一个生成任务。

在该文件里,我们配置一个名为build c++的task,将文件编译到工作目录下temp文件夹下的对应文件(你也可以自行配置生成目录,但需要和上面的launch.json相对应。我的build c++配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"label": "build c++",
"type": "shell",
"command": "g++",
"args": [
"${file}",
"-std=c++17",
"-o",
"${workspaceFolder}/temp/${fileBasenameNoExtension}.out",
"-g"
],
"group": "build",
"presentation": {
"echo": true,
"focus": false,
"panel":"shared",
"showReuseMessage": true,
"clear": false,
"reveal": "silent"
},
},

大多数配置保持默认即可。我这里修改的地方主有:

label:任务名称,和launch.json对应

command:g++来编译C++,gcc来编译C

args:即命令行运行参数。我在这里使用的C17标准。-o下面的一个参数即为输出目录。其中${fileBasenameNoExtension}表示没有拓展名的文件名。

配置好以上两个文件后,你应该就可以在调试界面运行程序并设置断点、监视变量了。如果出现变量未验证(Unverified Breakpoint)的问题,文末有一个常见的解决方案。

个性化

之前Visual Studio特别吸引人的一点就是在输入完一行代码后,编辑器会自动帮我在诸如运算符左右的地方加上空格并整理大括号的位置。这一Auto Formatting功能在VSCode下也得到了保留。可以按需在设置里开启Format On Paste, Format on Save, Format On Type的选项。

此外,在商店市场里还有许多配色主题和图标主题可以选择。

一些 Tips

无法设置断点的解决方案

前阵子会很莫名其妙地遇到部分c语言文件中的断点无法正常停止的问题。所有断点打开后都会提示Unverified Breakpoint,但有些文件却可以正常打断点。搜索许久未果,为此还特地开了一个GitHub的的issue(https://github.com/Microsoft/vscode-cpptools/issues/3246)。

后来其实解决方案很简单。文件目录里不要有空格就好了。

(摔

将你的文件夹托管到 GitHub

使用GitHub Desktop可以可视化地将代码托管到GitHub。但VSCode也内置了源代码管理。大多数基本操作都可以在这里完成。你还可以下载Git History插件来查看提交情况。如果该文件夹还没有一个Git仓库,只需要点击初始化就可以了。

提交的时候如果你没有配置过你的用户名和密码,可能会报错。这时候使用快捷键control+`打开终端,配置一下默认用户名和邮箱:

git config --global user.name "用户名" git config --global user.email "用户邮箱"

在Push更改的时候,会需要输入你的GitHub账户和密码。如果想要保存账户和密码,在终端中使用git config --global credential.helper store即可保存你的凭据。

对于 Linux 的更改

VSCode同样提供具有GUI的Linux系统版本。如果你使用虚拟机并在虚拟机中共享同一个工作文件夹,lldb的调试配置文件可能会无法运行。这时候只需要将你的Launch.json中的"MIMode"配置由lldb改成gdb即可。

一些值得推荐的插件

这里是我觉得一些比较不错的插件,会有极小几率持续更新。

  • Markdown All in One:
  • 增强的Markdown预览,支持了LaTeX公式,并可以格式化美化源文件。
  • sftp:玩服务器的话可以试一试,小规模操作可以丢掉FileZilla了。直接使用VSCode编辑服务器文件简直太棒了。
  • Markdown PDF:Markdown党的福音,可以利用Chromium内核将md导出美观的pdf文件。
  • Nasc VSCode Touchbar:自定义TouchBar上的功能,可以添加注释、批量重命名、跳转定义等功能,更加接近Xcode的TouchBar体验。

  • FontSize Shortcuts:可以使用Command + +/-快速调整编辑器中文本字体大小而不影响其他部分的大小。
  • CodeRunner:免配置一件快速运行多种语言的代码,不支持断点调试。
  • VSC Netease Music:网易云音乐的VSCode插件?实用性需考证,更像一个玩具。不过很好玩。

Welcome to my other publishing channels