濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > 解決VScode配置遠(yuǎn)程調(diào)試Linux程序的問(wèn)題

解決VScode配置遠(yuǎn)程調(diào)試Linux程序的問(wèn)題

熱門標(biāo)簽:電銷機(jī)器人對(duì)公司貢獻(xiàn) 濟(jì)源電話外呼系統(tǒng)怎么樣 智能外呼系統(tǒng)如何部署 蘭州語(yǔ)音電銷機(jī)器人軟件 電話機(jī)器人服務(wù)差 高德地圖標(biāo)注在建線路 山東400電話如何辦理 宿州防封外呼系統(tǒng)廠家 ai電銷機(jī)器人 如何開發(fā)

下面看下VScode遠(yuǎn)程調(diào)試Linux程序的問(wèn)題,具體內(nèi)容如下,一起看看吧!

最近在Linux上調(diào)程序,但是gdb使用屬于入門階段,主要是沒有圖形化界面直觀。在網(wǎng)上查找了有兩個(gè)方案可選,一個(gè)是通過(guò)VisualStudio2019的遠(yuǎn)程調(diào)試功能,因?yàn)樽罱恢痹谟肰Scode,所以沒有試,之后有時(shí)間了可以試一下。另一個(gè)方案就是通過(guò)VScode的Remote Development插件(微軟官方提供的)進(jìn)行遠(yuǎn)程調(diào)試。本文介紹下這個(gè)方案。
雖然網(wǎng)上也有其他的文章進(jìn)行介紹,但是都是寫的成功的情況,沒有寫出來(lái)過(guò)程遇到的問(wèn)題,而且有些地方不太清楚。所以我覺得自己寫一個(gè)。另外請(qǐng)大家注意的是,這篇文檔介紹的是遠(yuǎn)程調(diào)試,并不介紹遠(yuǎn)程編譯,遠(yuǎn)程調(diào)試VScode也是支持的,但是我目前不需要,后續(xù)如果需要再做配置,而且我的項(xiàng)目需要使用cmake及make進(jìn)行編譯,并不是直接用g++編譯,所以也沒有開始配置。
VScode的遠(yuǎn)程調(diào)試是利用gdbserver的機(jī)制進(jìn)行的。大體原理是通過(guò)在Windows上或者其他圖形化系統(tǒng)上的VScode,使用Remote Development插件進(jìn)行ssh連接到遠(yuǎn)程Linux上,然后通過(guò)gdbserver提供的連接進(jìn)行遠(yuǎn)程調(diào)試。下面開始介紹具體配置方式。

需要的軟件及插件

首先肯定需要安裝gdb和gdbserver,大家根據(jù)自己遠(yuǎn)程系統(tǒng)的類別進(jìn)行安裝就行了。我用的Ubuntu,默認(rèn)已經(jīng)安裝了。命令如下:

sudo apt install gdb
sudo apt install gdbserver

其次需要安裝VScode的Remote Development插件,官方的C/C++插件。對(duì)于這個(gè)C/C++插件等遠(yuǎn)程連接到Linux上之后,還需要安裝到遠(yuǎn)程Linux上。可以看我下面的截圖,在插件的卸載按鈕旁邊有個(gè)“已在SSH:x.x.x.x上啟用擴(kuò)展”,這是已經(jīng)安裝過(guò)的。后面到連接成功后介紹安裝方法。

遠(yuǎn)程連接

在安裝了Remote Development插件后,就可以遠(yuǎn)程連接Linux了,ssh的連接方式有兩種,一種是賬戶密碼。還有一種是公私鑰連接。這里推薦使用公私鑰連接,因?yàn)楹竺孢h(yuǎn)程調(diào)試過(guò)程會(huì)多個(gè)地方連接,需要多次輸入密碼比較麻煩,使用公私鑰的話只需要配置一次就可以了,非常方便。仍然選擇賬戶密碼連接的可以跳過(guò)此處。ssh遠(yuǎn)程配置方法比較簡(jiǎn)單,但是在Windows上有個(gè)大問(wèn)題。

首先在遠(yuǎn)程Linux上生成公私鑰對(duì):

# 執(zhí)行下面命令,然后根據(jù)提示生成公私鑰對(duì)。
ssh-keygen -t rsa

# 公鑰直接在生成路徑中保存,然后轉(zhuǎn)存為authorized_keys
# 存儲(chǔ)到用戶的.ssh目錄中,一般在生成的時(shí)候,默認(rèn)路徑就是用戶的.ssh目錄
# 假設(shè)生成的公鑰是 "vscode_rsa.pub",最后注意權(quán)限設(shè)置,默認(rèn)不需要改。
cat /home/user/.ssh/vscode_rsa.pub >> /home/user/.ssh/authorized_keys
chmod 644 /root/.ssh/authorized_keys

# 私鑰下載到Windows機(jī)器里
# 假設(shè)路徑是 "D:/.ssh/vscode_rsa"

到這里都是沒有問(wèn)題的。現(xiàn)在需要在VScode中配置連接了。
安裝完Remote Development插件后,在VScode最左邊有個(gè)遠(yuǎn)程資源管理器圖標(biāo),如下圖所示,然后選擇SSH Targets,點(diǎn)擊加號(hào),按照user@ip的格式添加,然后根據(jù)提示會(huì)看到遠(yuǎn)程連接的配置文件?;蛘咧苯釉谙旅娼缑嫔霞犹?hào)旁邊的齒輪,直接打開配置文件,按照下面的格式添加,在IdentityFile后面添加私鑰的路徑:

Host x.x.x.x
 HostName x.x.x.x
 User username
 IdentityFile D:/.ssh/vscode_rsa

然后就可以在原先的文件瀏覽界面,打開遠(yuǎn)程的文件夾。但是在配置好進(jìn)行連接的時(shí)候,VScode的終端報(bào)錯(cuò)了:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'vscode_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "vscode_rsa": bad permissions

根本原因是私鑰的權(quán)限問(wèn)題。這要是在Linux里,直接使用chmod,就可以修改,修改為644即可,但是windows,就稍微麻煩點(diǎn)。

解決辦法:

在私鑰上右擊選擇屬性,然后選擇【安全】選項(xiàng)卡,然后點(diǎn)擊下面的【高級(jí)】按鈕,然后在新彈出的窗口下方點(diǎn)擊【禁用繼承】,然后點(diǎn)擊繼承那個(gè)按鈕上面的【添加】按鈕重新將當(dāng)前window登錄用戶設(shè)置為私鑰的所有者,并勾選所有權(quán)限。最后跟下面一樣即可:

這時(shí)再次打開VScode遠(yuǎn)程連接,就沒有問(wèn)題了。

遠(yuǎn)程調(diào)試

VScode設(shè)置

首先需要將剛才說(shuō)的C/C++插件安裝到遠(yuǎn)程Linux上,安裝方法簡(jiǎn)單,點(diǎn)擊插件,在已安裝插件里面可以看到有的插件會(huì)有一個(gè)【在SSH:IP】的綠色提示,找到C/C++插件,點(diǎn)擊那個(gè)綠色提示,將其安裝到遠(yuǎn)程Linux上。安裝完之后,重新啟動(dòng)VScode,最好也重新啟動(dòng)遠(yuǎn)程Linux,因?yàn)槲揖褪菦]有啟動(dòng),在后面操作的時(shí)候,VScode提示找不到所選的調(diào)試器類型,也不會(huì)自動(dòng)根據(jù)你選的調(diào)試器生成launch.json文件。但是如果你不重啟也能成功的話,最好。
然后打開VScode的資源管理器,就是左側(cè)最上面那個(gè)瀏覽文件的,會(huì)提示打開遠(yuǎn)程文件夾,這時(shí)只需要按提示打開需要調(diào)試的程序所在的文件夾即可。

然后在菜單欄里選擇運(yùn)行->添加配置,會(huì)彈出提示選擇調(diào)試環(huán)境,這是選擇【C++ GDB/LLDB】那個(gè)即可自動(dòng)生成launch.json文件。如下:

{
 // 使用 IntelliSense 了解相關(guān)屬性。 
 // 懸停以查看現(xiàn)有屬性的描述。
 // 欲了解更多信息,請(qǐng)?jiān)L問(wèn): https://go.microsoft.com/fwlink/?linkid=830387
 "version": "0.2.0",
 "configurations": [
 {
  "name": "(gdb) 啟動(dòng)",
  "type": "cppdbg",
  "request": "launch",
  "program": "${workspaceFolder}/program",
  "args": [],
  "stopAtEntry": true,
  "cwd": "${workspaceFolder}",
  "environment": [],
  "externalConsole": false,
  "MIMode": "gdb",
  "setupCommands": [
  {
   "description": "為 gdb 啟用整齊打印",
   "text": "-enable-pretty-printing",
   "ignoreFailures": true
  }
  ]
 }
 ]
}

如果沒有自動(dòng)生成,則說(shuō)明VScode沒有識(shí)別環(huán)境,你安裝的插件還沒有生效,所以需要重啟VScode以及遠(yuǎn)程Linux。
生成的launch.json文件需要修改的地方就是program字段,${workspaceFolder}是指你剛才打開的遠(yuǎn)程文件夾,只需要在后面指定待調(diào)試程序的名稱即可。stopAtEntry字段,默認(rèn)是false,這是指開始調(diào)試的時(shí)候是否在main函數(shù)斷點(diǎn),所以改為true。其他使用默認(rèn)的就行,也不需要添加什么。

遠(yuǎn)程Linux開啟gdbserver

在遠(yuǎn)程Linux上開啟gdbserver,開啟方式如下:

#gdbserver localhost:<port> <program> <args>
gdbserver localhost:2333 /path/to/myprogram arg1 arg2

注意端口號(hào)不要改,VScode連接的時(shí)候默認(rèn)就是用的這個(gè)端口號(hào)。然后在VScode中直接按F5就可以調(diào)試了,gdb會(huì)自動(dòng)查看源代碼的,所以你這個(gè)待調(diào)試的程序最好是debug版的。

參考文章:

https://warmgrid.github.io/2019/05/21/remote-debug-in-vscode-insiders.html

https://superuser.com/questions/1296024/windows-ssh-permissions-for-private-key-are-too-open

到此這篇關(guān)于解決VScode配置遠(yuǎn)程調(diào)試Linux程序的問(wèn)題的文章就介紹到這了,更多相關(guān)VScode遠(yuǎn)程調(diào)試Linux程序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

標(biāo)簽:佛山 畢節(jié) 巴中 南寧 云南 安陽(yáng) 晉中 衡水

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《解決VScode配置遠(yuǎn)程調(diào)試Linux程序的問(wèn)題》,本文關(guān)鍵詞  解決,VScode,配置,遠(yuǎn)程,調(diào)試,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《解決VScode配置遠(yuǎn)程調(diào)試Linux程序的問(wèn)題》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于解決VScode配置遠(yuǎn)程調(diào)試Linux程序的問(wèn)題的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    延寿县| 宜阳县| 筠连县| 灵台县| 西安市| 防城港市| 射洪县| 岳阳县| 天气| 厦门市| 安西县| 辰溪县| 唐山市| 于都县| 筠连县| 温泉县| 衡阳县| 思茅市| 义乌市| 卢氏县| 永福县| 日土县| 子长县| 深水埗区| 洞头县| 福鼎市| 旺苍县| 黄平县| 南丰县| 白山市| 安泽县| 东丽区| 永寿县| 冷水江市| 青浦区| 辽阳县| 武功县| 修文县| 霸州市| 台湾省| 阿坝|