在VSCode上使用WSL进行Linux开发
建议直接拉到最下面。
0x01 前言
Visual Studio Code 是一个跨平台的开源代码编辑器,因为有微软爸爸的后台,其相关的生态可以说是很庞大了,该支持的都有,可拓展性也很强,我使用一段时间之后体验极佳。
然后呢因为 OI/ACM-ICPC 系列竞赛的评测机都是 Linux 环境的,因此我就想用 Windows Subsystem for Linux 来做日常的练习开发平台,Linux 上的包管理比Windows强大到不知道哪儿去了,虽然 Windows 上有 Visual Studio 这个宇宙最强IDE,但是在算法竞赛实践上还是太麻烦了一点。而 WSL 的出现即可以解决不同平台的 C++ 表现不同的问题,又可以丝滑地体验 Linux 的终端环境,最最最重要的是 VSCode 太好看了啊!那么如何用Windows上的VSCode来与WSL交互呢?
0x02 比较蛋疼的方法-利用VSCode的工具和设置
这个方法试图将WSL侧的工具链(bash、gcc、gdb、git等)全部整合到Windows侧的VSCode,下面一步一步来。
Terminal使用WSL
首先我们需要安装 WSL,这里直接贴一个教程链接吧 https://www.cnblogs.com/JettTang/p/8186315.html ,如果你已经安装好了,那可以直接略过这里。接下来的教程假设我们使用的是 Ubuntu 系统。
安装完成后,进入 Bash ,输入以下指令,将我们开发C/C++常用的工具安装到子系统中
sudo apt update
sudo apt install git build-essential gdb
接下来在 Visual Studio Code 设置中新增如下内容:
{
"terminal.integrated.shell.windows": "C:\\Windows\\System32\\wsl.exe"
}
如果要调用 32 位进程,需要配置使用 Sysnative:C:\\Windows\\sysnative\\bash.exe
如果 VSCode 是 64 位版本,可以直接使用:C:\\WINDOWS\\System32\\bash.exe
或者 C:\\WINDOWS\\System32\\wsl.exe
重启 VSCode 终端,唤起的终端环境就是 WSL 的 shell 环境了。
WSL的Git
这里的配置是为了让 VSCode 使用 WSL 内的 git
进行版本控制。这里我们使用 wslgit 这个小工具来让 VSCode 直接调用 WSL 的 git 而不是默认的Windows的 git。
在 wslgit 的 Release 页面下载,将 wslgit.exe 文件放到一个合适的地方,并复制完整的路径,在 VSCode 设置中将这个设置调整为自己的wslgit:
{
"git.path": "X:\\path\\to\\wslgit.exe"
}
安装与配置cpp-tool
首先前往 VSCode 的 Extentions(Ctrl + Shift + X),搜索 C/C++
安装 C/C++ for Visual Studio Code 插件,这个插件是微软官方开发的,可靠有保证,同样也是开源的。
安装并激活插件后,同时打开一个工作区文件夹,例如我使用 D:\OneDrive\TheRoadToACM
,按 F1
,输入 C/Cpp: Edit Configurations
(其实不用输完,应该会自动选择的) 然后回车,你会发现它自动打开了 c_cpp_properties.json
, 将文件内容替换为以下内容:
{
"configurations": [
{
"name": "WSL",
"intelliSenseMode": "gcc-x64",
"compilerPath": "/usr/bin/gcc",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [ "LOCAL" ],
"cStandard": "c11",
"cppStandard": "c++14"
}
],
"version": 4
}
tasks.json配置
接下来,在 $工作区文件夹$/.vscode/
下面新建一个 tasks.json
, 加入如下内容:
{
// tasks.json
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Build",
"command": "g++",
"args": [
"-g",
"-Wall",
"-std=c++14",
"/mnt/替换为工作区文件夹的路径/${fileBasename}",
//这里使用Linux子系统的目录结构,例如C盘根目录在/mnt/c/ ,下面的路径同理
"-o",
"/mnt/替换为工作区文件夹的路径/a.out",
//这个是输出的二进制文件路径
"-D LOCAL"
],
"problemMatcher": {
"owner": "cpp",
"fileLocation": [
"relative",
"${workspaceRoot}"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
},
"type": "shell",
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "silent",
"focus": true,
"panel": "shared"
}
},
{
"label": "Run",
"command": "/mnt/替换为工作区文件夹的路径/a.out",
//刚才设置的输出二进制文件路径
"type": "shell",
"dependsOn": "Build",
"group": {
"kind": "test",
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": true,
"panel": "shared",
"showReuseMessage": true
}
}
]
}
这样我们就能用 VSCode 的 Tasks 功能来调用 WSL 的 GCC/G++ 编译器并运行编译好的程序了。这里为了方便直接将运行程序的任务与 Tasks: Run Test Task
任务关联起来了,可以在F1里面找到这个指令并执行,不过每次要这样还是有点麻烦,我们可以直接按 F7
来 运行Test Task。
快自己动手写一个Hello World试试吧!
在WSL上调试
只运行当然不够啊,万一想调试怎么办?VSCode 本来就有非常强大的调试功能,那肯定要用上啦。
首先在 工作区文件夹/.vscode/
下面新建一个 launch.json
,修改为以下内容:
{
// launch.json
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "GDB Launch",
"type": "cppdbg",
"request": "launch",
"program": "/mnt/替换为工作区文件夹的路径/a.out",
"args": ["-fThreading"],
"stopAtEntry": false,
"cwd": "/mnt/替换为工作区文件夹的路径/",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": false
}
],
"pipeTransport": {
"pipeCwd": "",
"pipeProgram": "c:\\windows\\system32\\bash.exe", //wsl的路径
"pipeArgs": ["-c"],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/mnt/c": "c:\\",
"/mnt/d": "d:\\"
},
"preLaunchTask": "Build"
}
]
}
然后,就可以使用 VSCode 进行调试啦, 打开一段程序,添加断点,按F5
即可开始调试,F10
跳到下一行,也可以在旁边添加 Watch 来查看变量。
稍微简单点-在WSL下使用图形界面
这个我也没用过,见 https://spencerwoo.com/dowww/4-GUI
配置好之后直接在 Ubuntu 桌面上开浏览器下载 VSCode 然后就可以运行了。。。
是不是很简单?
最简单的方法
不久前微软更新了Remote WSL插件,装这个,按照提示打开WSL窗口,就能直接进行WSL开发了,不只是CPP。
可以参考这篇知乎专栏文章,不过现在Remote WSL可以在正式版VSC上使用了。
本页面的全部内容在 CC BY-NC-SA 4.0 协议之条款下提供,附加条款亦可能应用
本文链接:https://www.copperion.com/2018/vscode-cpp-wsl/