從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默認是用root用戶操作,這里建議新增一個用戶,以免某些軟件默認不允許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)卡也是一樣的,該端口是為了防止主機也默認啟動了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)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,443評論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,530評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,407評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,981評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,759評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,204評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,263評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,415評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,955評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,650評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,892評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,675評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,967評論 2 374

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