2021-05-12 14:32:11
解決VScode設定遠端偵錯Linux程式的問題
下面 下麪看下VScode遠端偵錯Linux程式的問題,具體內容如下,一起看看吧!
最近在Linux上調程式,但是gdb使用屬於入門階段,主要是沒有圖形化介面直觀。在網上查詢了有兩個方案可選,一個是通過VisualStudio2019的遠端偵錯功能,因爲最近一直在用VScode,所以沒有試,之後有時間了可以試一下。另一個方案就是通過VScode的Remote Development外掛(微軟官方提供的)進行遠端偵錯。本文介紹下這個方案。
雖然網上也有其他的文章進行介紹,但是都是寫的成功的情況,沒有寫出來過程遇到的問題,而且有些地方不太清楚。所以我覺得自己寫一個。另外請大家注意的是,這篇文件介紹的是遠端偵錯,並不介紹遠端編譯,遠端偵錯VScode也是支援的,但是我目前不需要,後續如果需要再做設定,而且我的專案需要使用cmake及make進行編譯,並不是直接用g++編譯,所以也沒有開始設定。
VScode的遠端偵錯是利用gdbserver的機制 機製進行的。大體原理是通過在Windows上或者其他圖形化系統上的VScode,使用Remote Development外掛進行ssh連線到遠端Linux上,然後通過gdbserver提供的連線進行遠端偵錯。下面 下麪開始介紹具體設定方式。
需要的軟體及外掛
首先肯定需要安裝gdb和gdbserver,大家根據自己遠端系統的類別進行安裝就行了。我用的Ubuntu,預設已經安裝了。命令如下:
sudo apt install gdb sudo apt install gdbserver
其次需要安裝VScode的Remote Development外掛,官方的C/C++外掛。對於這個C/C++外掛等遠端連線到Linux上之後,還需要安裝到遠端Linux上。可以看我下面 下麪的截圖,在外掛的解除安裝按鈕旁邊有個「已在SSH:x.x.x.x上啓用擴充套件」,這是已經安裝過的。後面到連線成功後介紹安裝方法。
遠端連線
在安裝了Remote Development外掛後,就可以遠端連線Linux了,ssh的連線方式有兩種,一種是賬戶密碼。還有一種是公私鑰連線。這裏推薦使用公私鑰連線,因爲後面遠端偵錯過程會多個地方連線,需要多次輸入密碼比較麻煩,使用公私鑰的話只需要設定一次就可以了,非常方便。仍然選擇賬戶密碼連線的可以跳過此處。ssh遠端設定方法比較簡單,但是在Windows上有個大問題。
首先在遠端Linux上生成公私鑰對:
# 執行下面 下麪命令,然後根據提示生成公私鑰對。 ssh-keygen -t rsa # 公鑰直接在生成路徑中儲存,然後轉存爲authorized_keys # 儲存到用戶的.ssh目錄中,一般在生成的時候,預設路徑就是用戶的.ssh目錄 # 假設生成的公鑰是 "vscode_rsa.pub",最後注意許可權設定,預設不需要改。 cat /home/user/.ssh/vscode_rsa.pub >> /home/user/.ssh/authorized_keys chmod 644 /root/.ssh/authorized_keys # 私鑰下載到Windows機器裡 # 假設路徑是 "D:/.ssh/vscode_rsa"
到這裏都是沒有問題的。現在需要在VScode中設定連線了。
安裝完Remote Development外掛後,在VScode最左邊有個遠端資源管理器圖示,如下圖所示,然後選擇SSH Targets,點選加號,按照user@ip的格式新增,然後根據提示會看到遠端連線的組態檔。或者直接在下面 下麪介面上加號旁邊的齒輪,直接開啓組態檔,按照下面 下麪的格式新增,在IdentityFile後面新增私鑰的路徑:
Host x.x.x.x HostName x.x.x.x User username IdentityFile D:/.ssh/vscode_rsa
然後就可以在原先的檔案瀏覽介面,開啓遠端的資料夾。但是在設定好進行連線的時候,VScode的終端報錯了:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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
根本原因是私鑰的許可權問題。這要是在Linux裡,直接使用chmod,就可以修改,修改爲644即可,但是windows,就稍微麻煩點。
解決辦法:
在私鑰上右擊選擇屬性,然後選擇【安全】索引標签,然後點選下面 下麪的【高階】按鈕,然後在新彈出的視窗下方點選【禁用繼承】,然後點選繼承那個按鈕上面的【新增】按鈕重新將當前window登錄用戶設定爲私鑰的所有者,並勾選所有許可權。最後跟下面 下麪一樣即可:
這時再次開啓VScode遠端連線,就沒有問題了。
遠端偵錯
VScode設定
首先需要將剛纔說的C/C++外掛安裝到遠端Linux上,安裝方法簡單,點選外掛,在已安裝外掛裏面可以看到有的外掛會有一個【在SSH:IP】的綠色提示,找到C/C++外掛,點選那個綠色提示,將其安裝到遠端Linux上。安裝完之後,重新啓動VScode,最好也重新啓動遠端Linux,因爲我就是沒有啓動,在後面操作的時候,VScode提示找不到所選的偵錯程式型別,也不會自動根據你選的偵錯程式生成launch.json檔案。但是如果你不重啓也能成功的話,最好。
然後開啓VScode的資源管理器,就是左側最上面那個瀏覽檔案的,會提示開啓遠端資料夾,這時只需要按提示開啓需要偵錯的程式所在的資料夾即可。
然後在選單欄裡選擇執行->新增設定,會彈出提示選擇偵錯環境,這是選擇【C++ GDB/LLDB】那個即可自動生成launch.json檔案。如下:
{ // 使用 IntelliSense 瞭解相關屬性。 // 懸停以檢視現有屬性的描述。 // 欲瞭解更多資訊,請存取: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "(gdb) 啓動", "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 } ] } ] }
如果沒有自動生成,則說明VScode沒有識別環境,你安裝的外掛還沒有生效,所以需要重啓VScode以及遠端Linux。
生成的launch.json檔案需要修改的地方就是program欄位,${workspaceFolder}是指你剛纔開啓的遠端資料夾,只需要在後面指定待偵錯程式的名稱即可。stopAtEntry欄位,預設是false,這是指開始偵錯的時候是否在main函數斷點,所以改爲true。其他使用預設的就行,也不需要新增什麼。
遠端Linux開啓gdbserver
在遠端Linux上開啓gdbserver,開啓方式如下:
#gdbserver localhost:<port> <program> <args> gdbserver localhost:2333 /path/to/myprogram arg1 arg2
注意埠號不要改,VScode連線的時候預設就是用的這個埠號。然後在VScode中直接按F5就可以偵錯了,gdb會自動檢視原始碼的,所以你這個待偵錯的程式最好是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
到此這篇關於解決VScode設定遠端偵錯Linux程式的問題的文章就介紹到這了,更多相關VScode遠端偵錯Linux程式內容請搜尋it145.com以前的文章或繼續瀏覽下面 下麪的相關文章希望大家以後多多支援it145.com!
相關文章