配置WSL
首先,要确保你的WSL已经安装了g++ 和 gdb。
以下是Ubuntu的命令。
sudo apt-get install g++
sudo apt-get install gdb
新建Visual Studio项目
首先,新建一个Linux C++项目。
修改项目属性:
把Platfrom Toolset改成GCC for Windows Subsystem for Linux。
当你点击运行的时候,你发现什么东西一闪而过,而你什么都没看见,就这么结束了。。。
这里我一定要吐槽一下,真不知道这里微软是怎么设计的。要解决这个问题,请看下面:
Linux 控制台窗口 Linux Console Window
其实,Linux的控制台窗口,需要我们手动去查看。方法就是目录选 Debug -> Linux Console Window。
另外一个方法,大家也都知道,就是用输入来阻止程序终止。
不过,我今天一不小心关闭了Linux Console Window,这时,哪怕我用了输入了阻止程序终止,我还是看不懂这个窗口。。。
我觉得,这一定是一个BUG。我明天会去找微软报BUG。
我是谁?我在哪里?
我们可以读取WSL的环境变量,确定自己是谁。
#include <iostream>
#include <filesystem>
using namespace std;
int main()
{
cout << "who am i?" << endl;
cout << getenv("USER") << endl;
cout << "where am i?" << endl;
cout << getenv("PWD") << endl;
//set C++ Language Standard to C++17 (-std=c++17)
cout << "Current path is " << filesystem::current_path() << endl;
return 0;
}
这里为什么不是root,因为WSL的默认用户不是root。我感觉改成root比较好。毕竟程序开发完了,都有放进docker。我也懒得在docker里面建第二个用户。
这里和远程调试有比较大的区别。如果是远程连接Linux,代码会被复制到远程机器,生成的可执行文件也在远程机器上,本地的可执行文件(.out)应该是从远程机器复制回来的。
然后,使用WSL以后,代码不会被复制到WSL。因为WSL有个特性,他可以直接访问windows下面的文件。比如D盘就是/mnt/d。Visual Studio充分利用了这一特性,不再复制代码。这样的好处就是可以省下一些磁盘空间。这也符合我使用WSL的习惯。我的习惯就是文件还是存在Windows里。WSL用来安装一些开发用的程序,如果程序运行异常,直接重装WSL。这样,就把重装的压力,由Windows转移到了Linux。