解決VScode配置遠(yuǎn)程調(diào)試Linux程序的問題
下面看下VScode遠(yuǎn)程調(diào)試Linux程序的問題,具體內(nèi)容如下,一起看看吧!
最近在Linux上調(diào)程序,但是gdb使用屬于入門階段,主要是沒有圖形化界面直觀。在網(wǎng)上查找了有兩個方案可選,一個是通過VisualStudio2019的遠(yuǎn)程調(diào)試功能,因為最近一直在用VScode,所以沒有試,之后有時間了可以試一下。另一個方案就是通過VScode的Remote Development插件(微軟官方提供的)進(jìn)行遠(yuǎn)程調(diào)試。本文介紹下這個方案。
雖然網(wǎng)上也有其他的文章進(jìn)行介紹,但是都是寫的成功的情況,沒有寫出來過程遇到的問題,而且有些地方不太清楚。所以我覺得自己寫一個。另外請大家注意的是,這篇文檔介紹的是遠(yuǎn)程調(diào)試,并不介紹遠(yuǎn)程編譯,遠(yuǎn)程調(diào)試VScode也是支持的,但是我目前不需要,后續(xù)如果需要再做配置,而且我的項目需要使用cmake及make進(jìn)行編譯,并不是直接用g++編譯,所以也沒有開始配置。
VScode的遠(yuǎn)程調(diào)試是利用gdbserver的機(jī)制進(jìn)行的。大體原理是通過在Windows上或者其他圖形化系統(tǒng)上的VScode,使用Remote Development插件進(jìn)行ssh連接到遠(yuǎn)程Linux上,然后通過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++插件。對于這個C/C++插件等遠(yuǎn)程連接到Linux上之后,還需要安裝到遠(yuǎn)程Linux上??梢钥次蚁旅娴慕貓D,在插件的卸載按鈕旁邊有個“已在SSH:x.x.x.x上啟用擴(kuò)展”,這是已經(jīng)安裝過的。后面到連接成功后介紹安裝方法。
遠(yuǎn)程連接
在安裝了Remote Development插件后,就可以遠(yuǎn)程連接Linux了,ssh的連接方式有兩種,一種是賬戶密碼。還有一種是公私鑰連接。這里推薦使用公私鑰連接,因為后面遠(yuǎn)程調(diào)試過程會多個地方連接,需要多次輸入密碼比較麻煩,使用公私鑰的話只需要配置一次就可以了,非常方便。仍然選擇賬戶密碼連接的可以跳過此處。ssh遠(yuǎn)程配置方法比較簡單,但是在Windows上有個大問題。
首先在遠(yuǎn)程Linux上生成公私鑰對:
# 執(zhí)行下面命令,然后根據(jù)提示生成公私鑰對。 ssh-keygen -t rsa # 公鑰直接在生成路徑中保存,然后轉(zhuǎn)存為authorized_keys # 存儲到用戶的.ssh目錄中,一般在生成的時候,默認(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"
到這里都是沒有問題的?,F(xiàn)在需要在VScode中配置連接了。
安裝完Remote Development插件后,在VScode最左邊有個遠(yuǎn)程資源管理器圖標(biāo),如下圖所示,然后選擇SSH Targets,點擊加號,按照user@ip的格式添加,然后根據(jù)提示會看到遠(yuǎn)程連接的配置文件?;蛘咧苯釉谙旅娼缑嫔霞犹柵赃叺凝X輪,直接打開配置文件,按照下面的格式添加,在IdentityFile后面添加私鑰的路徑:
Host x.x.x.x HostName x.x.x.x User username IdentityFile D:/.ssh/vscode_rsa
然后就可以在原先的文件瀏覽界面,打開遠(yuǎn)程的文件夾。但是在配置好進(jìn)行連接的時候,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
根本原因是私鑰的權(quán)限問題。這要是在Linux里,直接使用chmod,就可以修改,修改為644即可,但是windows,就稍微麻煩點。
解決辦法:
在私鑰上右擊選擇屬性,然后選擇【安全】選項卡,然后點擊下面的【高級】按鈕,然后在新彈出的窗口下方點擊【禁用繼承】,然后點擊繼承那個按鈕上面的【添加】按鈕重新將當(dāng)前window登錄用戶設(shè)置為私鑰的所有者,并勾選所有權(quán)限。最后跟下面一樣即可:
這時再次打開VScode遠(yuǎn)程連接,就沒有問題了。
遠(yuǎn)程調(diào)試
VScode設(shè)置
首先需要將剛才說的C/C++插件安裝到遠(yuǎn)程Linux上,安裝方法簡單,點擊插件,在已安裝插件里面可以看到有的插件會有一個【在SSH:IP】的綠色提示,找到C/C++插件,點擊那個綠色提示,將其安裝到遠(yuǎn)程Linux上。安裝完之后,重新啟動VScode,最好也重新啟動遠(yuǎn)程Linux,因為我就是沒有啟動,在后面操作的時候,VScode提示找不到所選的調(diào)試器類型,也不會自動根據(jù)你選的調(diào)試器生成launch.json文件。但是如果你不重啟也能成功的話,最好。
然后打開VScode的資源管理器,就是左側(cè)最上面那個瀏覽文件的,會提示打開遠(yuǎn)程文件夾,這時只需要按提示打開需要調(diào)試的程序所在的文件夾即可。
然后在菜單欄里選擇運(yùn)行->添加配置,會彈出提示選擇調(diào)試環(huán)境,這是選擇【C++ GDB/LLDB】那個即可自動生成launch.json文件。如下:
{ // 使用 IntelliSense 了解相關(guān)屬性。 // 懸停以查看現(xiàn)有屬性的描述。 // 欲了解更多信息,請訪問: 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沒有識別環(huán)境,你安裝的插件還沒有生效,所以需要重啟VScode以及遠(yuǎn)程Linux。
生成的launch.json文件需要修改的地方就是program字段,${workspaceFolder}是指你剛才打開的遠(yuǎn)程文件夾,只需要在后面指定待調(diào)試程序的名稱即可。stopAtEntry字段,默認(rèn)是false,這是指開始調(diào)試的時候是否在main函數(shù)斷點,所以改為true。其他使用默認(rèn)的就行,也不需要添加什么。
遠(yuǎn)程Linux開啟gdbserver
在遠(yuǎn)程Linux上開啟gdbserver,開啟方式如下:
#gdbserver localhost:<port> <program> <args> gdbserver localhost:2333 /path/to/myprogram arg1 arg2
注意端口號不要改,VScode連接的時候默認(rèn)就是用的這個端口號。然后在VScode中直接按F5就可以調(diào)試了,gdb會自動查看源代碼的,所以你這個待調(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程序的問題的文章就介紹到這了,更多相關(guān)VScode遠(yuǎn)程調(diào)試Linux程序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux .htaccess 設(shè)置 404 等錯誤頁面
linux服務(wù)器下通過設(shè)置htaccess來實現(xiàn)404轉(zhuǎn)向的代碼2008-06-06使用networkctl查詢Linux中網(wǎng)絡(luò)鏈接狀態(tài)的方法
networkctl?是?systemd?網(wǎng)絡(luò)管理工具的一個命令行工具,它用于查看和管理網(wǎng)絡(luò)鏈接狀態(tài),在這篇文章中,我們將詳細(xì)介紹如何使用?networkctl?查詢和管理?Linux?系統(tǒng)中的網(wǎng)絡(luò)連接狀態(tài),需要的朋友可以參考下2024-05-05centos6.5配置ssh免秘鑰登陸執(zhí)行pssh命令的講解
今天小編就為大家分享一篇關(guān)于centos6.5配置ssh免秘鑰登陸執(zhí)行pssh命令的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02詳解CentOS 6.5搭建Redis3.2.8單機(jī)分布式集群
這篇文章主要介紹了詳解CentOS 6.5搭建Redis3.2.8單機(jī)分布式集群,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05Linux內(nèi)核設(shè)備驅(qū)動之內(nèi)核的時間管理筆記整理
今天小編就為大家分享一篇關(guān)于Linux內(nèi)核設(shè)備驅(qū)動之內(nèi)核的時間管理筆記整理,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12Linux中查看物理CPU個數(shù)、核數(shù)、邏輯CPU個數(shù)的方法
下面小編就為大家?guī)硪黄狶inux中查看物理CPU個數(shù)、核數(shù)、邏輯CPU個數(shù)的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01Linux主機(jī)ssh使用秘鑰方式實現(xiàn)免登陸互通配置方式
實現(xiàn)多臺服務(wù)器間SSH免登陸的操作包括密鑰生成、配置與傳遞,首先在每臺主機(jī)上生成秘鑰,并將公鑰傳輸?shù)綄Ψ街鳈C(jī)的配置文件中,確保ssh服務(wù)開啟并且authorized_keys文件具有正確的權(quán)限,即可實現(xiàn)免登陸互通,其中可能遇到的問題通常跟文件權(quán)限有關(guān)2024-10-10