文章目录
VSCode是非常流行的代码编辑器,与WSL配合可方便地进行Linux下开发与测试。
WSL
WSL会自动加载本地文件系统到/mnt
目录下(如D盘下的wsl目录会映射到/mnt/d/wsl
)。
关闭wsl:wsl --shutdown
升级到WSL2
在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当前版本:
wsl -l -v
- 更新:
wsl --set-version Ubuntu 2
- 若首次安装(还未安装Linux系统),可设定默认版本:
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发行版本以<distribution name>
代替(如Ubuntu):
- 查看状态:
wsl --status
; - 停止wsl:
wsl --shutdown
,可释放占用的资源; - 列出安装版本:
wsl --list --verbose
/wsl -l -v
; - 安装:
wsl --install [--distribution <Distribution Name>]
,不指定发行版本时,安装默认版本; - 运行指定版本:
wsl --distribution <Distribution Name> --user <User Name>
; - 卸载指定版本:
wsl --unregister <Distribution Name>
;
VSCode
从https://code.visualstudio.com/download处下载VSCode安装包,直接安装即可。安装完成后根据需要安装相应插件。
快捷键
Ctrl + `
打开或关闭终端
常用快捷键
- 格式化代码:Alt + Shift + F
- 单行注释: Ctrl + /
- 多行注释:Shift + Alt + A (
/* */
) - 跳到指定行: Ctrl + G,然后输入行号
- 查找文件: Ctrl + Shift + F
行操作:
- 剪切当前行: Ctrl + X
- 插入一行:Ctrl + Enter(无论光标在何位置,插入一行并设光标到新行行首)下方插入;Ctrl + Shift + Enter上方插入;
- 复制一行:Alt + Shift + ↓下方;Alt + Shift + ↑上方;
- 移动一行:Alt + ↓下方;Alt + ↑上方;
词操作:
- 选中一个词:Ctrl + D
搜索替换:
- 查找:Ctrl + F
- 替换:Ctrl + H
- 项目内查找:Ctrl + Shift + F
书签
要使用书签功能,需要先安装Bookmarks插件:
- 创建或取消:Ctrl + Alt + K
- 下一个书签:Ctrl + Alt + L
- 上一个书签:Ctrl + Alt + J
列出所有书签:Ctrl + Shift + P打开控制面板,然后输入bookmarks
,选择对应命令即可。
代码折叠
代码折叠都是通过组合键实现的:
- 折叠代码:先Ctrl + K,再Ctrl + 0(数字0);
- 展开折叠:先Ctrl + K,再Ctrl + J;
- 切换折叠状态:先Ctrl + K,再Ctrl + L;
调试程序
为能调试wsl程序,需要先安装插件Remote - WSL
。
启动
先进入wsl,然后到程序所在目录,执行:
code .
会打开外部系统的VSCode,(写一个简单hello word程序)根据提示安装所需插件。
调试
创建launch.json文件:选择C++(GDB/LLDB)
环境,然后g++ - 生成和调试活动文件
,自动完成创建。
设置断点,按F5即可启动调试,在调试控制台
可查看调试信息以及执行调试命令。通过-exec <command>
(<command>
为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完整语法:print [options] [/fmt] expr
(可简写为p):
- options为选项,控制表达式内容或值(通过on或off开启与关闭);
- fmt:输出格式;
- expr:查看的变量或表达式(
&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 <fun>::var
输出函数fun中的var;
display追踪
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>
可删除编号为Nums的变量(多个时用空格分隔) - 通过
disable display <Nums>
可禁用变量显示 - 通过
enable display <Nums>
可启用变量显示
x内存
使用examine命令(简写是x)来查看内存地址中的值:
x[/<nfu>] <addr>
nfu三个参数都是可选的:
- n:正整数,表示要显示内存的长度(后面单元的数量)
- f:显示方式,见前面fmt格式;
- u:地址单元
- b:单字节
- h:双字节
- w:四字节
- g:八字节
x/2xw ary
:以十六进制方式显示2个四字节内存(共8个byte);
变量监控
通过watch可监视变量或表达式:
watch <expr>
- rwatch:只要出现读取目标变量的值的操作,程序就会停止;
- awatch:只要出现读取目标变量或改变变量的操作,程序就会停止;