从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 vencol@127.0.0.1 -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 vencol@127.0.0.1 -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 <stdlib.h>
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调试的过程完成,最后,祝大家工作顺利

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容