[toc]
开始前的准备
你需要安装好 VsCode,并使用下面命令检查你的 wsl 的版本:
wsl -l -v
如果从未安装过 wsl,或者版本为 1,都需要执行以下步骤升级 wsl:
在 Windows 功能中勾选 Hyper-V
新版的 Win10 可能是下面这样:
然后开启hyper-v模式,PowerShell中执行:
bcdedit /set hypervisorlaunchtype auto
然后下载 wsl_update_x64.msi
,百度网盘链接,提取码:6666
使用 wsl --set-version <distro name> 2
命令将 <distro name>
替换为要更新的 Linux 发行版的名称。 例如,wsl --set-version Ubuntu-20.04 2
会将 Ubuntu 20.04 发行版升级到 WSL 2
更多请参加官方文档
安装 Ubuntu
无法通过命令行安装最新版的 Ubuntu 22.04.1
尝试在应用商店搜索安装:
下载完成后打开:
稍等片刻,即成功安装
设置 root 密码:
sudo passwd root
切换到 root:
su
接下来换源,这里我选择清华源,找到对应的 ubuntu 版本,这里以 22.04 LTS 为例
cd /etc/apt
# 备份一下
cp sources.list sources.list.bak
# 换源
sudo sed -i "s@http://.*archive.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list
sudo sed -i "s@http://.*security.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list
# 更新
apt update
配置 C++ 环境
安装常用编译软件包 build-essential
,gdb
apt install build-essential
apt install gdb
查看当前 g++ 版本
g++ -v
这里我已经是 g++ 11.2.0
可以再升级一下相关联的软件包:
apt upgrade g++
找个文件编译试试,你会发现已经支持c++ 23了,太棒啦
下面是失败的折腾记录,请省略
然后我 WSL Ubuntu 22.04 死活也连不上,提示 VS Code Server for WSL closed unexpectedly. Check WSL terminal for more details
,搜了各种解决办法都没有成功,我以为是两个 22 的 SSH 端口冲突了,但修改端口后也连不上,SSH 要连上 WSL 好像有点麻烦,需要重装 openssh-server
,还要配置端口转发(?)
无可奈何,那试试升级原来的 20:
apt update
apt upgrade -y
apt dist-upgrade -y
apt autoclean
apt autoremove -y
apt install update-manager-core
do-release-upgrade -d
升级成功,最后能在 VsCode 里面使用 -std=c++23
了
第二天我发现把 Ubuntu 22 的 wsl 升级到 2 就能连上了,离谱,原来我的 20 的 wsl1 在没升级的情况下也能连上啊(??)昨天我是打算先连上再升级的?
好吧,现在我有两个 WSL Ubuntu 22,拿来感觉没啥用,本来打算一个 20 一个 22 或许还有点用(图中的20已经是22了,只是NAME没改罢了)
接下来我使用一个没有任何配置的文件夹来演示如何在 VsCode 下配置 C++ 环境
连接 WSL:
可以看到左下角显示已经连接成功,
首先根据自行需要安装下面的拓展:
打开文件夹,
按下 F5
,选择 g++ 生成调试活动文件
这时候提示下面的东西无需理会,刚刚只创建了task.json
,还没有创建 launch.json
这是刚刚 task.json
已经自动创建的内容:
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++ 生成活动文件",
"command": "/usr/bin/g++",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}
然后 Ctrl + Shift + P
得到 c_cpp_properties.json
,内容如下:
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu17",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}
再创建 launch.json
:
然后把 "program"
改下,复制 task.json
里面的"${fileDirname}/${fileBasenameNoExtension}"
(生成的文件所在位置和文件名)
这时候 Ctrl + F5
非调试模式运行,已经能正常启动程序了
这时候点调试也能正常使用了:
目前这样的话你需要确保每次调试前都 -g
编译生成了最新的可执行文件,为了省去这一步骤,在launch.json
中添加一项:
"preLaunchTask": "C/C++: g++ 生成活动文件",
最后完整 launch.json
如下:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"preLaunchTask": "C/C++: g++ 生成活动文件",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"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
}
]
}
]
}
后续
可以在c_cpp_properties.json
中定义宏
"defines": ["LRL52"],
task.json
中的 args 也添加上:
"-DLRL52",
关于栈空间,在 Linux 下使用:
ulimit -a
查看栈空间:
可以看到默认栈空间只有 8 MB
,
修改栈空间为 125MB($12800 = 125 \cdot 1024$):
ulimit -s 128000
CPH 运行正常: