從0開始势篡,利用wsl+vscode+gdb實現(xiàn)linux應(yīng)用層軟件的開發(fā)調(diào)試

一禁悠、目的

二、wsl子系統(tǒng)的安裝適配

0. wsl的官方安裝教程

1. wsl的開啟

2. 下載對應(yīng)的wsl系統(tǒng)

3. LxRunOffline的下載和安裝

4. 使用LxRunOffline的安裝wsl子系統(tǒng)

三粱坤、 wsl子系統(tǒng)的基礎(chǔ)環(huán)境搭建

四比规、wsl開發(fā)環(huán)境的搭建

五拦英、vscode開發(fā)環(huán)境的搭建

六测秸、vscode調(diào)試環(huán)境的測試




一、目的

?? 本文的目的是钞瀑,讓想要接觸linux開發(fā)的小伙伴慷荔,通過wsl體驗相關(guān)linux操作显晶,及l(fā)inux應(yīng)用程序開發(fā)的過程,文末會提供相應(yīng)的鏡像包地址偿警,并提供一個簡單的linux的demo應(yīng)用唯笙。個人感覺相比使用虛擬機的方式開發(fā)有下面幾個優(yōu)勢
1崩掘、代碼可以直接放在Windows的目錄下,因為wsl可以訪問整個Windows系統(tǒng)的文件系統(tǒng)诵原。
2皮假、vscode可以通過ssh直接使用代碼進行斷點調(diào)試開發(fā)骂维。
3航闺、對于wsl1來說(本文只針對wsl1說明,wsl2也可實現(xiàn)調(diào)試功能侮措,但是不能訪問主機的外設(shè)分扎,因為wsl2是通過hyper-v胧洒,生成的linux虛擬機,和linux環(huán)境完全相同)菲饼,可以使用Windows下的串口宏悦,win10中的COMx對應(yīng)的是wsl中的/dev/ttySx,比如com5對應(yīng)的是wsl的/dev/ttyS5源葫。(目前只支持串口臼氨,usb好像不行芭届,需要通過usbovernet的工具實現(xiàn)usb的訪問褂乍,這個不太好)
但是缺點也是明顯的,因為是和Windows公用的一個文件系統(tǒng)屡拨,也就是系統(tǒng)底層相關(guān)的開發(fā)是不適用的呀狼,比如開發(fā)uboot和kernel是不太適用的损离。本身不是真正的ext文件系統(tǒng)僻澎。

二、wsl子系統(tǒng)的安裝適配

0. wsl的官方安裝教程

?? wsl全稱Windows Subsystem for Linux祖乳,即Windows上的linux子系統(tǒng)眷昆,是win10特定版本之后新加入的特性功能,可以通過啟用或關(guān)閉Windows功能垦藏,把wsl打開。wsl上面的linux子系統(tǒng)對應(yīng)希望入門linux應(yīng)用開發(fā)或者運維的小伙伴來說轰驳,是個不錯的入門選擇级解。下面的連接是官方的安裝連接勤哗,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))來實現(xiàn)wsl的安裝和管理,相關(guān)的說明可以通過這個網(wǎng)站了解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. 下載對應(yīng)的wsl系統(tǒng)

??wsl系統(tǒng)支持多個linux的發(fā)行版本泵殴,可以通過微軟的應(yīng)用商店直接獲取也可以通過下面的連接下載下載對應(yīng)的linux發(fā)行版本的wsl笑诅,下圖是現(xiàn)在支持的wsl子系統(tǒng)吆你,下載好后俊犯,把對應(yīng)的后綴修改為zip后,解壓到相應(yīng)的目錄砌梆,這個目錄是后面要使用的安裝文件目錄咸包,比如我這里的目錄是I:\wsl\images\Ubuntu_2004.2021.825.0_x64杖虾,可以看出下載的是ubuntu2004版本支持x64的wsl系統(tǒng)。

3. LxRunOffline的下載和安裝

??從github找到最新的LxRunOffline的release (3.5版本)版本芦鳍,下載并解壓到相應(yīng)的目錄柠衅,比如我這里解壓到I:\wsl\籍琳,解壓后會出現(xiàn)相應(yīng)版本的目錄趋急,我這里的是I:\wsl\LxRunOffline-v3.5.0-msvc呜达,解壓之后需要把相關(guān)目錄加入的win10的環(huán)境變量中。如下圖所示:


如果安裝正確后在cmd終端輸入LxRunOffline version眉踱,會出現(xiàn)相應(yīng)LxRunOffline 版本信息

4. 使用LxRunOffline的安裝wsl子系統(tǒng)

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谈宛、安裝的各個參數(shù)說明如下

3胎署、成功安裝后琼牧,可以看到在-d參數(shù)后的輸出目錄有一個rootfs文件,這個就算linux的根文件系統(tǒng)撬槽,另外所有的Windows盤符都會掛載到rootfs/mnt/目錄下面侄柔,比如c盤對應(yīng)的會掛載到wsl系統(tǒng)的/mnt/c/目錄

三暂题、 wsl子系統(tǒng)的基礎(chǔ)環(huán)境搭建

1薪者、wsl子系統(tǒng)(ubuntu2004)安裝好了,通過任意的cmd命令輸入wsl或者直接在桌面點擊相應(yīng)快捷方式即可進入wsl子系統(tǒng)赶站,如下所示


2、溫馨提示陷谱,wsl默認(rèn)是用root用戶操作烟逊,這里建議新增一個用戶铺根,以免某些軟件默認(rèn)不允許root用戶使用位迂,可以通過adduser命令新增用戶如下

3掂林、把新建的用戶加入sudoer,通過vi /etc/sudoers修改如下部分內(nèi)容精置,把對應(yīng)的用戶加入sudoer锣杂,我這里添加的是vencol

4元莫、修改apt的源柒竞,這里建議使用阿里源,1.通過指令sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak備份原文件布隔,2.通過sudo vi /etc/apt/sources.list修改文件內(nèi)容如下

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更新一下源哀军,完成基礎(chǔ)的wsl安裝處理

四杉适、wsl開發(fā)環(huán)境的搭建

1、通過指令sudo apt-get install build-essential搭建基本的編譯開發(fā)環(huán)境
2片习、通過指令sudo apt-get install openssh-server 安裝sshd服務(wù)端
3藕咏、通過指令修改sudo vi /etc/ssh/sshd_config文件秽五,修改內(nèi)容涉及如下坦喘,因為wsl和主機共享環(huán)境資源,也就是網(wǎng)卡也是一樣的洲胖,該端口是為了防止主機也默認(rèn)啟動了sshd服務(wù)

Port 22222
PasswordAuthentication yes

4绿映、通過命令ssh vencol@127.0.0.1 -p 22222輸入對應(yīng)用戶的密碼測試是否成功叉弦,如果成功會顯示對應(yīng)用戶的ssh應(yīng)答

五淹冰、vscode開發(fā)環(huán)境的搭建

1巨柒、 vscode下載Download Visual Studio Code - Mac, Linux, Windows,這里建議下載壓縮包珍坊,就是zip的格式正罢,這樣可以把插件放在非c盤翻具。如果下載的是非壓縮包格式(非zip)的話,可以跳過后面2~4點的設(shè)置叹洲。
2疹味、把下載的壓縮包,解壓到相應(yīng)的目錄诫咱,我這里解壓到G:\soft\VSCode\目錄
3坎缭、在目錄G:\soft\VSCode\下掏呼,添加VSCode.bat的腳本,內(nèi)容如下莽鸿,其中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的快捷方式蒋得,復(fù)制到你想要執(zhí)行的地方额衙,比如桌面或者啟動菜單等,通過雙擊快捷方式转绷,啟動vscode殿雪,而不是通過直接雙擊vscode的圖標(biāo)啟動丙曙,這樣做的好處是亏镰,所有安裝的擴展插件都不會安裝到c盤,而是安裝到腳本所在的目錄的VSCode-extensions文件夾索抓,我這里的情況是安裝到G:\soft\VSCode\VSCode-extensions文件夾里面钧忽,還有一個好處是升級vscode的時候,只需要下載壓縮包逼肯,并解壓到腳本目錄耸黑,之后修改腳本中的vscode路徑即可完成升級。
5篮幢、通過VSCode.bat腳本運行vscode程序大刊,點擊擴展按鈕或者通過快捷鍵(Ctrl + Shift +x)打開擴展目錄,安裝c插件和Remote SSH插件



6缺菌、通過側(cè)邊欄的“遠程資源管理器”,打開添加ssh界面的+號添加搜锰,輸入對應(yīng)的用戶賬號和密碼伴郁,比如我這里輸入ssh vencol@127.0.0.1 -p 22222其中22222是設(shè)置的端口號

7、保存好配置文件后蛋叼,會多出一個127.0.0.1的主機焊傅,點擊下圖的加,會提示重新打開窗口

8鸦列、選擇對應(yīng)的平臺租冠,這里我們的wsl是linux,并且輸入對應(yīng)的密碼薯嗤,第一次會長時間一點顽爹,因為需要在wsl系統(tǒng)里面安裝vscode配置,如果成功將顯示如下圖骆姐,連接127.0.0.1

9镜粤、打開工程代碼對應(yīng)的文件夾捏题,比如我這里的test

10、會提示安裝c插件肉渴,如果沒有提示請自行安裝公荧,這里是因為wsl里面沒有c插件,所以需要安裝一個同规。

六循狰、vscode調(diào)試環(huán)境的測試

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、通過運行---》啟動調(diào)試关炼,或者快捷鍵F5開啟調(diào)試程腹,第一次會彈出配置gdb,選擇如圖儒拂,選擇gcc寸潦,內(nèi)容為輸出文件



launch.json文件內(nèi)容如下

{
    // 使用 IntelliSense 了解相關(guān)屬性。 
    // 懸停以查看現(xiàn)有屬性的描述社痛。
    // 欲了解更多信息见转,請訪問: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "gcc - 生成和調(diào)試活動文件",
            "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啟動調(diào)試蒜哀,同時也會自動編譯測試代碼池户,通過指令tail -f testout.txt關(guān)注testout的文件輸出,不難看出凡怎,調(diào)試終端和文件都以1s一個值的方式輸出,如圖所示可以看到赊抖,點前斷點停止了i為63的地方

image.png

5统倒、通過修改i的值,是程序重新重10開始輸出氛雪,如圖房匆,明顯可以看出,終端是從11開始輸出报亩,而文件則是從10開始輸出的浴鸿,這是因為斷點在輸出文件執(zhí)行的行。

6弦追、通過指令LxRunOffline e -n ubt2004 -f ubt2004.tar.gz導(dǎo)出配置的wsl岳链,可以方便移植到其他支持wsl的win10系統(tǒng)上。成功導(dǎo)出如圖

至此劲件,利用wsl+vscode+gdb調(diào)試的過程完成掸哑,最后约急,祝大家工作順利

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市苗分,隨后出現(xiàn)的幾起案子厌蔽,更是在濱河造成了極大的恐慌,老刑警劉巖摔癣,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奴饮,死亡現(xiàn)場離奇詭異,居然都是意外死亡择浊,警方通過查閱死者的電腦和手機戴卜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來近她,“玉大人叉瘩,你說我怎么就攤上這事≌成樱” “怎么了薇缅?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長攒磨。 經(jīng)常有香客問我泳桦,道長,這世上最難降的妖魔是什么娩缰? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任灸撰,我火速辦了婚禮,結(jié)果婚禮上拼坎,老公的妹妹穿的比我還像新娘浮毯。我一直安慰自己,他們只是感情好泰鸡,可當(dāng)我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布债蓝。 她就那樣靜靜地躺著,像睡著了一般盛龄。 火紅的嫁衣襯著肌膚如雪饰迹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天余舶,我揣著相機與錄音啊鸭,去河邊找鬼。 笑死匿值,一個胖子當(dāng)著我的面吹牛赠制,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播挟憔,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼憎妙,長吁一口氣:“原來是場噩夢啊……” “哼库正!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起厘唾,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤褥符,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后抚垃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喷楣,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年鹤树,在試婚紗的時候發(fā)現(xiàn)自己被綠了铣焊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡罕伯,死狀恐怖曲伊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情追他,我是刑警寧澤坟募,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站邑狸,受9級特大地震影響懈糯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜单雾,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一赚哗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧硅堆,春花似錦屿储、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至朴乖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間助赞,已是汗流浹背买羞。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留雹食,地道東北人畜普。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像群叶,于是被迫代替她去往敵國和親吃挑。 傳聞我的和親對象是個殘疾皇子钝荡,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容