从0开始,利用wsl+vscode+gdb实现linux应用层软件的开发调试

一、目的

二、wsl子系统的安装适配

0. wsl的官方安装教程

1. wsl的开启

2. 下载对应的wsl系统

3. LxRunOffline的下载和安装

4. 使用LxRunOffline的安装wsl子系统

三、 wsl子系统的基础环境搭建

四、wsl开发环境的搭建

五、vscode开发环境的搭建

六、vscode调试环境的测试




一、目的

   本文的目的是,让想要接触linux开发的小伙伴,通过wsl体验相关linux操作,及linux应用程序开发的过程,文末会提供相应的镜像包地址,并提供一个简单的linux的demo应用。个人感觉相比使用虚拟机的方式开发有下面几个优势
1、代码可以直接放在Windows的目录下,因为wsl可以访问整个Windows系统的文件系统。
2、vscode可以通过ssh直接使用代码进行断点调试开发。
3、对于wsl1来说(本文只针对wsl1说明,wsl2也可实现调试功能,但是不能访问主机的外设,因为wsl2是通过hyper-v,生成的linux虚拟机,和linux环境完全相同),可以使用Windows下的串口,win10中的COMx对应的是wsl中的/dev/ttySx,比如com5对应的是wsl的/dev/ttyS5。(目前只支持串口,usb好像不行,需要通过usbovernet的工具实现usb的访问,这个不太好)
但是缺点也是明显的,因为是和Windows公用的一个文件系统,也就是系统底层相关的开发是不适用的,比如开发uboot和kernel是不太适用的。本身不是真正的ext文件系统。

二、wsl子系统的安装适配

0. wsl的官方安装教程

   wsl全称Windows Subsystem for Linux,即Windows上的linux子系统,是win10特定版本之后新加入的特性功能,可以通过启用或关闭Windows功能,把wsl打开。wsl上面的linux子系统对应希望入门linux应用开发或者运维的小伙伴来说,是个不错的入门选择。下面的连接是官方的安装连接,Manual installation steps for older versions of WSL | Microsoft Docs
但是本文介绍另外一个开源的工具软件LxRunOffline (GitHub - DDoSolitary/LxRunOffline: A full-featured utility for managing Windows Subsystem for Linux (WSL))来实现wsl的安装和管理,相关的说明可以通过这个网站了解LxRunOffline使用手册 | 0opsdc (oopsdc.com)

1. wsl的开启

  满足微软官方的win10版本要求,即可开启wsl功能

To update to WSL 2, you must be running Windows 10.
*   For x64 systems: **Version 1903** or higher, with **Build 18362** or higher.
*   For ARM64 systems: **Version 2004** or higher, with **Build 19041** or higher.
*   Builds lower than 18362 do not support WSL 2\. Use the [Windows Update Assistant]
(https://www.microsoft.com/software-download/windows10) to update your version of Windows.

2. 下载对应的wsl系统

  wsl系统支持多个linux的发行版本,可以通过微软的应用商店直接获取也可以通过下面的连接下载下载对应的linux发行版本的wsl,下图是现在支持的wsl子系统,下载好后,把对应的后缀修改为zip后,解压到相应的目录,这个目录是后面要使用的安装文件目录,比如我这里的目录是I:\wsl\images\Ubuntu_2004.2021.825.0_x64,可以看出下载的是ubuntu2004版本支持x64的wsl系统。

3. LxRunOffline的下载和安装

  从github找到最新的LxRunOffline的release (3.5版本)版本,下载并解压到相应的目录,比如我这里解压到I:\wsl\,解压后会出现相应版本的目录,我这里的是I:\wsl\LxRunOffline-v3.5.0-msvc,解压之后需要把相关目录加入的win10的环境变量中。如下图所示:


如果安装正确后在cmd终端输入LxRunOffline version,会出现相应LxRunOffline 版本信息

4. 使用LxRunOffline的安装wsl子系统

1、输入命令LxRunOffline i -n ubt2004 -f I:\wsl\images\Ubuntu_2004.2021.825.0_x64\install.tar.gz -d I:\wsl\images\ubt2004 -s,成功安装显示如下:


2、安装的各个参数说明如下

3、成功安装后,可以看到在-d参数后的输出目录有一个rootfs文件,这个就算linux的根文件系统,另外所有的Windows盘符都会挂载到rootfs/mnt/目录下面,比如c盘对应的会挂载到wsl系统的/mnt/c/目录

三、 wsl子系统的基础环境搭建

1、wsl子系统(ubuntu2004)安装好了,通过任意的cmd命令输入wsl或者直接在桌面点击相应快捷方式即可进入wsl子系统,如下所示


2、温馨提示,wsl默认是用root用户操作,这里建议新增一个用户,以免某些软件默认不允许root用户使用,可以通过adduser命令新增用户如下

3、把新建的用户加入sudoer,通过vi /etc/sudoers修改如下部分内容,把对应的用户加入sudoer,我这里添加的是vencol

4、修改apt的源,这里建议使用阿里源,1.通过指令sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak备份原文件,2.通过sudo vi /etc/apt/sources.list修改文件内容如下

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe 
# 把源代码部分的更新源屏蔽
# deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

5、通过指令sudo apt-get update更新一下源,完成基础的wsl安装处理

四、wsl开发环境的搭建

1、通过指令sudo apt-get install build-essential搭建基本的编译开发环境
2、通过指令sudo apt-get install openssh-server 安装sshd服务端
3、通过指令修改sudo vi /etc/ssh/sshd_config文件,修改内容涉及如下,因为wsl和主机共享环境资源,也就是网卡也是一样的,该端口是为了防止主机也默认启动了sshd服务

Port 22222
PasswordAuthentication yes

4、通过命令ssh [email protected] -p 22222输入对应用户的密码测试是否成功,如果成功会显示对应用户的ssh应答

五、vscode开发环境的搭建

1、 vscode下载Download Visual Studio Code - Mac, Linux, Windows,这里建议下载压缩包,就是zip的格式,这样可以把插件放在非c盘。如果下载的是非压缩包格式(非zip)的话,可以跳过后面2~4点的设置。
2、把下载的压缩包,解压到相应的目录,我这里解压到G:\soft\VSCode\目录
3、在目录G:\soft\VSCode\下,添加VSCode.bat的脚本,内容如下,其中VSCode-win32-x64-1.63.2是我这边解压之后的vscode软件所在的目录

set VSCODEPATH=%~dp0
if "%1"=="hide" goto CmdBegin
start mshta vbscript:createobject("wscript.shell").run("""%~0"" hide",0)(window.close)&&exit
:CmdBegin
    %VSCODEPATH%VSCode-win32-x64-1.63.2\Code.exe  --extensions-dir %VSCODEPATH%VSCode-extensions

4、通过脚本G:\soft\VSCode\VSCode.bat的快捷方式,复制到你想要执行的地方,比如桌面或者启动菜单等,通过双击快捷方式,启动vscode,而不是通过直接双击vscode的图标启动,这样做的好处是,所有安装的扩展插件都不会安装到c盘,而是安装到脚本所在的目录的VSCode-extensions文件夹,我这里的情况是安装到G:\soft\VSCode\VSCode-extensions文件夹里面,还有一个好处是升级vscode的时候,只需要下载压缩包,并解压到脚本目录,之后修改脚本中的vscode路径即可完成升级。
5、通过VSCode.bat脚本运行vscode程序,点击扩展按钮或者通过快捷键(Ctrl + Shift +x)打开扩展目录,安装c插件和Remote SSH插件



6、通过侧边栏的“远程资源管理器”,打开添加ssh界面的+号添加,输入对应的用户账号和密码,比如我这里输入ssh [email protected] -p 22222其中22222是设置的端口号

7、保存好配置文件后,会多出一个127.0.0.1的主机,点击下图的加,会提示重新打开窗口

8、选择对应的平台,这里我们的wsl是linux,并且输入对应的密码,第一次会长时间一点,因为需要在wsl系统里面安装vscode配置,如果成功将显示如下图,连接127.0.0.1

9、打开工程代码对应的文件夹,比如我这里的test

10、会提示安装c插件,如果没有提示请自行安装,这里是因为wsl里面没有c插件,所以需要安装一个。

六、vscode调试环境的测试

1、通过命令sudo apt-get install gdb安装gdb,通过命令gdb -v进行测试
2、编写测试代码如下

#include 
int main (void) {
    char buf[128]="echo ";
    for (int i=0; i<100; i++) {
        printf("this is %d \n", i);
        snprintf(buf, sizeof(buf), "echo num:%d >> ./testout.txt", i);
        system(buf);
        sleep(1);
    }
    return 0;
}

3、通过运行---》启动调试,或者快捷键F5开启调试,第一次会弹出配置gdb,选择如图,选择gcc,内容为输出文件



launch.json文件内容如下

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "gcc - 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/test",
            "args": ["-g"],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: gcc 生成活动文件",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

4、通过F5启动调试,同时也会自动编译测试代码,通过指令tail -f testout.txt关注testout的文件输出,不难看出,调试终端和文件都以1s一个值的方式输出,如图所示可以看到,点前断点停止了i为63的地方

image.png

5、通过修改i的值,是程序重新重10开始输出,如图,明显可以看出,终端是从11开始输出,而文件则是从10开始输出的,这是因为断点在输出文件执行的行。

6、通过指令LxRunOffline e -n ubt2004 -f ubt2004.tar.gz导出配置的wsl,可以方便移植到其他支持wsl的win10系统上。成功导出如图

至此,利用wsl+vscode+gdb调试的过程完成,最后,祝大家工作顺利

你可能感兴趣的:(从0开始,利用wsl+vscode+gdb实现linux应用层软件的开发调试)