WSL会自动加载本地文件系统到/mnt
目录下(如D盘下的wsl目录会映射到/mnt/d/wsl
)。
关闭wsl:wsl --shutdown
在Win10下先开启wsl功能,默认是WSL1。要升级到WSL2,需要先启用组件,以管理方式启动Powershell:
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
执行完成后,根据提示重启系统。
从https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi获取WSL2 Linux内核更新包并运行。
启动Powershell:
wsl -l -v
wsl --set-version Ubuntu 2
wsl --set-default-version 2
安装完系统(Ubuntu)后,需要安装编译工具链:
sudo apt update # 更新软件包
sudo apt install build-essential #安装build-essential软件包
sudo apt install gdb #
sudo apt install cmake
wsl相关命令以及安装的系统(以Ubuntu为例)可以直接通过Powershell运行。
设置Ubuntu的默认登录用户(WSL默认已安装时输入的用户登录,可以改为root):
ubuntu config --default-user root
安装的linux发行版本以
代替(如Ubuntu):
wsl --status
;wsl --shutdown
,可释放占用的资源;wsl --list --verbose
/wsl -l -v
;wsl --install [--distribution ]
,不指定发行版本时,安装默认版本;wsl --distribution --user
;wsl --unregister
;从https://code.visualstudio.com/download处下载VSCode安装包,直接安装即可。安装完成后根据需要安装相应插件。
Ctrl + `
打开或关闭终端
常用快捷键
/* */
)行操作:
词操作:
搜索替换:
要使用书签功能,需要先安装Bookmarks插件:
列出所有书签:Ctrl + Shift + P打开控制面板,然后输入bookmarks
,选择对应命令即可。
代码折叠都是通过组合键实现的:
Ctrl+Shift+P,选择C/Cpp: Edit configurations...
生成c_cpp_properties.json
,在配置文件中的includePath下添加所需头文件路径。
Ctrl+Shift+P,选择Tasks: Configure Tasks…
,选择Create tasks.json file from templates
,创建程序构建文件tasks.json。
通过Alt + Shift + F可方便地格式化,但默认总是括号换行;
在.vscode/setting.json(文件–首选项–设置,或者左下角齿轮–设置;搜索format ,在‘扩展c/c++’中设定‘C_Cpp: clang_format_style’;)中添加
"C_Cpp.clang_format_fallbackStyle": "{BasedOnStyle: Chromium, IndentWidth: 4, ColumnLimit: 160}"
远程连接步骤
Remote Development
为能调试wsl程序,需要先安装插件Remote - WSL
。
先进入wsl,然后到程序所在目录,执行:
code .
会打开外部系统的VSCode,(写一个简单hello word程序)根据提示安装所需插件。
创建launch.json文件:选择C++(GDB/LLDB)
环境,然后g++ - 生成和调试活动文件
,自动完成创建。
设置断点,按F5即可启动调试,在调试控制台
可查看调试信息以及执行调试命令。通过-exec
(
为GDB指令)即可执行GDB命令(GDB使用可参见《GDB 调试指南》)。
GDB有两种常用变量查看方法print(简写p)与display;display方式查看时,每次暂停时都会显示对应变量值。
显示时,都可通过fmt设定内容输出方式:
format | 释义 |
---|---|
x | hexadecimal |
d | signed decimal |
u | unsigned decimal |
o | octal |
t | binary ( t stands for two) |
a | address |
c | character |
f | floating number |
s | string |
print完整语法:print [options] [/fmt] expr
(可简写为p):
&expr
取地址,*expr
取指针值)options | 说明 |
---|---|
-address | 查看指针变量时,是否同时打印其内存地址,默认值为 on。 等价于单独执行 set print address on|off 命令。 |
-array | 是否以便于阅读的格式输出数组中的元素,默认值为 off。 等价于单独执行 set printf array on|off 命令。 |
-array-indexes | 对于非字符类型数组,输出每个元素值的时,是否同时显示对应的数组下标,默认值为 off。 等价于单独执行 set print array-indexes on|off 命令。 |
-pretty | 以便于阅读的格式打印结构体变量的值,默认值为 off。 等价于单独执行 set print pretty on|off 命令。 |
print打印变量与表达式值时,还支持@
和::
运算符:
@
:输出数组中指定长度的元素,如p/x *ary@3
以十六进制输出前三个元素,p/c ary[2]@2
以字符形式输出数组的下标2、3元素;::
:用于指定变量所属作用域(多个同名变量时),p ['file']::var
输出文件file中的var(文件名要用引号括起,省略文件名输出全局变量),p ::var
输出函数fun中的var;display 追踪变量值,每当程序暂停执行(例如单步执行)时,GDB 调试器都会自动再次打印变量的值,而 print 命令则不会。
display[/fmt] expr
通过info display
可查看所有要显示变量列表:
Auto-display expressions now in effect:
Num Enb Expression
1: y /x count
2: y /x count
3: y /c count
undisplay
可删除编号为Nums的变量(多个时用空格分隔)disable display
可禁用变量显示enable display
可启用变量显示使用examine命令(简写是x)来查看内存地址中的值:
x[/
nfu三个参数都是可选的:
x/2xw ary
:以十六进制方式显示2个四字节内存(共8个byte);
通过watch可监视变量或表达式:
watch