VSCode 閱讀 Linux 代碼怎么才不卡頓?這樣做才能快的飛起!
本文轉載自微信公眾號「奇伢云存儲」,作者奇伢。轉載本文請聯系奇伢云存儲公眾號。
Linux 內核代碼用什么編輯器?
分享過怎么學習 Linux 內核代碼的思路,當時順便提了一點,奇伢是用 vscode 看內核代碼。有同學對此提出了疑問:
- vscode 看 Linux 代碼不卡嗎?
- vscode 符號跳轉怎么老有問題?
- windows 開發 Linux 項目好麻煩,總是要手動同步代碼?
其實,上面提出的三點疑問,合理配置 vscode 是可以完美解決的。今天就以 Linux 內核源碼為例,分享一下超大項目源碼的源碼開發閱讀的姿勢。
思考遇到的幾個問題
我們經常遇到兩個問題:
- 本地電腦存在瓶頸,單機性能有限,畢竟資金緊缺?
- 一般電腦安裝的都是 windows 或者 mac 圖形支撐好的系統,而開發的項目又必須是 Linux 上編譯運行?
如果本機直接用 vscode ,勢必會遇到上面的問題。比如 Linux 代碼量巨大,本機性能是 hold 不住,編輯器建立內存的索引非常龐大,既要吃內存又要吃 CPU 。對于編譯,那就更麻煩了,涉及到手動的同步。
我們經常怎么解決它?
- 縱向優化電腦,給自己電腦加個內存條,換個 cpu ,這個思路是可以的,但是它永遠存在性能瓶頸。這還真不是錢的問題;
- 對于平臺依賴,以前的實踐是 windows 下編輯,然后用 scp 或者其他同步工具,把代碼同步到另外一臺 Linux 下去編譯,很麻煩;
怎么才能徹底解決它?
奇伢的最佳實踐:vscode 遠程開發,利用多機性能;
怎么做才能解決單機的瓶頸和平臺依賴?
解決單機瓶頸的思路非常簡單,那就是分布式、多機部署。
我的使用姿勢是本機打開一個 vscode ,但是代碼放在遠程主機,遠程主機是一臺性能強勁的 Linux 服務器,速度杠杠的。
這樣的好處就是把資源消耗的壓力分攤到遠程主機,本機的消耗非常少,再大的項目也非常穩定。
第二個好處就是平臺的無縫切換,即使你使用的是 windows 機器,也能非常絲滑的進行 Linux 項目的開發,代碼編輯,項目編譯無感切換。
遠程主機是一臺 32 核 128 G SSD 盤 的服務器,跑個 Linux 源代碼的解析那還不是綽綽有余。
有童鞋問,這服務器哪里來?
答:你不是在上班嘛。公司的。
并且這種開發方式能夠讓你的電腦不用再焦慮,把縱向優化的思路轉變成橫向的擴展之后,你的瓶頸將不復存在。你的本機只做一個界面即可。
效果展示:
怎么配置 vscode 遠程開發?
講了那么多,我們接下來看看怎么實踐。怎么配置這個呢?下面以 Linux 源碼為例,手把手教你配置。
準備 Linux 主機
這是我們的遠程主機,性能怎么好怎么來。當然,如果只是為了跨平臺,其實可以是虛擬機。
遠程主機安裝 global 工具
注意,是在遠程主機上安裝哦,為了更好,更快的解析我們的符號表。下面是 ubuntu 的命令,其他的 Linux 系統可以查一下,比如 centos 是 yum 安裝。
apt install global
安裝完之后,確認兩個二進制文件,global,gtags, 一般在 /usr/bin/ 目錄下。有這兩個文件,就說明 OK 。
Linux 源碼下載
這個自行去 Github 或者其他鏡像網站上下載即可。Github 地址:https://github.com/torvalds/linux.git
下載之后,放到遠程的目錄即可:
root@ubuntu20:/mnt/opensource/linux-3.10# pwd
/mnt/opensource/linux-3.10
vscode 安裝 Remote-SSH 插件
現在有主機,有代碼了,怎么才能讓 vscode 具備連接遠程主機的能力呢?
vscode 遠程連接主機主要是依賴于微軟提供的插件 Remote-SSH。
安裝完插件之后,vscode 就具備了連接遠程主機的能力。在左下角有個符號 >< ,點擊它就能選擇連接哪個遠程主機。連接上了之后,會重新開一個窗口,左下角也會顯示。
這里順便提一下,微軟一共發布了三款遠程連接的插件:
- Remote - Containers
- Remote - SSH
- Remote - WSL
名字上也很容易區分,就是支持連接容器,SSH主機,WSL子系統。
安裝 C/C++ GNU Global 插件
好,現在萬事俱備了。下一步就是把符號解析的事情準備好,你就能享受快速的源代碼閱讀體驗了。
首先我們連接上遠程主機,注意:這個時候會重新打開一個窗口,而不是在本地安裝。
當然,C/C++ 插件也最好安裝一下。
劃重點:一定要先連接上主機,然后再安裝 GNU Global 插件哦。一定是在遠程主機上安裝。
vscode 配置 global 路徑
vscode 的配置(ssh)里,輸入以下配置:
在 vscode 的 settings.json 配置里,指定 global 的相關路徑。
"gnuGlobal.globalExecutable": "/usr/bin/global",
"gnuGlobal.gtagsExecutable": "/usr/bin/gtags",
// 指明生成的符號表存放在哪個位置
"gnuGlobal.objDirPrefix": "/mnt/.global"
注意:"gnuGlobal.objDirPrefix" 的路徑必須要手動創建好,如果不存在,會導致后續 Rebuild 的失敗。
測試是否成功執行遠程主機上的 Gtags
好啦,現在插件安裝完成了。測試一下安裝配置的是否正確。shift + command + P 把命令面板掉出來,執行 Global: Show GNU Global Version 命令,看是否能成功顯示版本。在右下角顯示版本號,那么就說明一切就緒:
global (GNU GLOBAL) 6.6.4
最后一擊,生成符號表
shift + command + P 把命令面板調出來,執行 Global: Rebuild Gtags Database 命令。等待右下角的通知,如果顯示:
Build tag files successfully
那么就說明符號表解析完成了。符號表生成成功會在 "gnuGlobal.objDirPrefix" 的路徑里生成三個文件:
root@ubuntu20:/mnt/opensource/linux-3.10# ll -lh /mnt/.global/mnt/opensource/linux-3.10/
total 395M
drwxr-xr-x 2 root root 4.0K Feb 14 19:06 ./
drwxr-xr-x 3 root root 4.0K Feb 14 18:33 ../
-rw-r--r-- 1 root root 7.6M Feb 14 19:06 GPATH
-rw-r--r-- 1 root root 278M Feb 14 19:06 GRTAGS
-rw-r--r-- 1 root root 109M Feb 14 19:06 GTAGS
好了,上面的搞完,就可以愉快的使用 vscode 看源碼了,速度非常快。
好啦,現在你可以盡情享受 Linux 代碼的閱讀開發了,既能享受圖形界面的便捷,又能無縫的進行 Linux 的開發。而且不用在受限于本機電腦的資源瓶頸,具有無限的擴展空間。
總結
單機總是存在瓶頸,縱向優化它總有極限,并且價格不菲;
既要圖形界面的便捷?又要無縫切換 Linux 開發模式?遠程開發是個不錯的體驗;
vscode 使用插件來實現遠程開發,本機電腦作為一個界面,符號解析放在遠程主機,真正做到橫向擴展,理論上性能無上限;
Linux 源代碼的解析放到遠程主機,vscode 遠程連接,源代碼的閱讀流暢絲滑,開發體驗完美;