在Linux发行版下开发的最大问题是一堆Windows独占软件,即使Deepin做了许多努力,让QQ、TIM、网易云音乐和其他一些常用应用可以运行,还是有很多好东西如Onenote、微云同步客户端之类的无法运行,更别说微信这种虽然能运行但稳定性有很大问题的应用。碰巧,看到了WSL(windows下的linux子系统)在经过一年多更新后有了许多改进,尝试从Deepin搬回Windows,并且要解决Windows下Linux C的开发环境配置。
需要注意的是,本方法所需要的win10版本必须在15063以上,也就是创意者更新之后的版本。你可以打开命令行输入winver查看自己的版本。关于WSL的安装请自行解决,具体选择哪个发行版没有很大的区别,我是用ubuntu 18.04。另外,本文基于VSCode官方插件的文档。
visual studio code 配置
首先VSCode需要安装微软官方C/C++插件,如下图所示的插件。
VSCode一个不太好的地方是由于要对各种语言的支持,每个项目都要有单独的各种配置文件,所以每个C项目都要配置一遍配置文件,这里主要配置两个文件launch.json和tasks.json,同时这两个文件应该在你项目文件夹的.vscode目录下:
配置launch.json文件
launch.json应该如下所示:
{
"version": "0.2.0",
"configurations": [
{
"name": "C++ Launch",
"type": "cppdbg",
"request": "launch",
"program": "/mnt/c/works/clearn/test.o",//编译完成的文件
"args": ["-fThreading"],
"stopAtEntry": false,
"cwd": "/mnt/c/works/clearn",//项目所在目录
"environment": [],
"externalConsole": true,
"internalConsoleOptions": "openOnSessionStart",//调试时跳转到内部调试台
"preLaunchTask": "build",//编译任务
"windows": {
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
"pipeTransport": {
"pipeCwd": "",
"pipeProgram": "c:\\windows\\sysnative\\bash.exe",//通常不需要修改
"pipeArgs": ["-c"],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/mnt/c": "C:\\"//地址转换
}
}
]
}
这里详细说明一下,windows系统的各盘符是映射在linux子系统的/mnt目录下的,如C盘就映射为/mnt/c,所以上面涉及项目目录的都需要修改以符合你自身情况。有可能你会对pipeProgram不需要修改有疑问,WSL的启动文件不是在C:\Windows\System32目录下面吗?官方的解释是C/C++扩展本身是32位,所以需要特殊处理一下才能正常访问。
配置好launch.json文件,如果把其中的preLaunchTask去掉,其实你就已经可以用WSL的gdb调试文件了,只是在此之前你必须手动编译文件。因此才有了tasks.json文件,解决简单情况下的项目编译问题。
配置tasks.json文件
tasks.json如下所示:
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "wsl gcc -g /mnt/c/works/clearn/test.c -o /mnt/c/works/clearn/test.o",
"problemMatcher": [],
}
]
}
注意这了label的名字应该和preLaunchTask所对应,这个配置文件的意义就是在调试前运行一条命令编译文件。这得益于WSL和windows命令行的互通,你完全可以在Powershell中执行绝大多数linux命令,只需在这之前加上wsl即可,而且这与你子系统的发行版无关。
现在两个文件都已经配置完毕,你已经可以正常使用VSCode在WSL环境下编写C语言程序了。正常运行、断点调试、单步运行这些都没有问题。
单步调试提示找不到文件
在使用单步调试时提示“无法打开...:找不到文件(file:///build/glibc-OTsEL5/glibc-2.27/...”这类提示时,你要做的就是补全glibc-2.27目录下的文件,没有这些文件就VSCode的C/C++插件就无法正常单步调试。你可以直接下载文件并解压到指定的目录,像我的就是在C:/build/glibc-OTsEL5目录。如果版本不对请到这里寻找对应版本。
最后
经过两天的折腾终于完成了从Linux迁移到windows的目标,不过对于我这种初学者,没有开发过大型C语言程序,感觉还有很多坑等着我。