前言
我的主力環境是 Windows 系統,但是同樣需要維護一些 linux 工程程式碼。一般情況下,只需要開個 vmware 虛擬機器,裝個 linux 系統就可以進行修改,編譯和除錯操作,但是有時候我卻需要對 linux 真機環境進行遠端除錯,這時候如果能直接在 windows 系統載入 linux 工程程式碼進行遠端除錯,那當然是最好不過的。經過後續的調查,發現有兩個方案,一個是使用 VisualGDB
外掛,一個是直接使用 vscode
,其中 VisualGDB
外掛是最傻瓜的,配合 visual stduio
使用,但是我們需要尋找特別版,且需要熟悉其使用方法和配置,vscode
就相對輕量簡單,大家可以根據自己的需求選擇方案,這裡介紹一下 vscode
配置遠端linux除錯的方法
流程
首先是編寫 vscode
的 launch.json
檔案,內容如下:
{
// 使用 IntelliSense 瞭解相關屬性。
// 懸停以檢視現有屬性的描述。
// 欲瞭解更多資訊,請訪問: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "remote-attach",
"type": "cppdbg",
"request": "attach",
"program": "/usr/bin/test",
"processId":"${command:pickRemoteProcess}",
"sourceFileMap":{
"/home/magicdmer/workplace/test": "D:/Gitwork/test"
},
"pipeTransport": {
//"pipeCwd": "/usr/local/test",
"pipeProgram": "C:/Windows/System32/OpenSSH/ssh.exe",
"pipeArgs": ["root@192.168.50.120"],
"debuggerPath": "/usr/bin/gdb"
},
"MIMode": "gdb"
}
]
}
這裡要注意下面幾個欄位:
- processId,這個需要填寫
pickRemoteProcess
, 而本地除錯是pickProcess
很容易被忽略 - sourceFileMap,這個是原始檔對映,我們在linux編譯環境編譯test除錯版程式後,test程式自身會包含程式碼所在的位置資訊,我們需要在這裡把原本的位置資訊對映到本地的對應目錄
- pipTransport,這個就是用來遠端掛載目標機器除錯程式的配置資訊,下面進行詳細描述
pipeTransport 的配置
我們上面的配置檔案使用 ssh 來進行遠端通訊,其中 OpenSSH 程式應該在 win10 之後都是自帶的,大家可以自行檢視,如果沒有的話可以自行安裝一個即可
我們使用 vscode 的 Remote - SSH
系列外掛後,開啟遠端系統上的原始碼資料夾,vscode 會彈框提示我們輸入使用者密碼,但是我們進行 pipTransport 遠端配置的時候,它是不會彈框提示我們輸入密碼的,我們必須配置一種可以無需輸入密碼,無需確定,直接 ssh 遠端目標機器的方法,流程如下:
- 生成本地 ssh 的key檔案
ssh-keygen 也是 openssh 目錄中自帶的程式,執行後預設是在本地使用者目錄下的 .ssh 目錄下ssh-keygen -t rsa
- 然後我們需要將生成的key檔案複製到需要除錯的 linux 機器,這裡使用 ssh-copy-id 工具,這個工具 openssh 沒有自帶,需要安裝 git-for-windows 或者 msys64 交叉編譯環境,使用其自帶的:
它會自動從當前系統的使用者目錄下的 .ssh 目錄中複製對應檔案到目標機器,寫入相關配置檔案,如果需要指定目錄檔案,可以使用 -i 選項指定證書檔案ssh-copy-id root@192.168.50.120
- 然後我們使用 cmd 命令列,用 ssh 連線一次遠端機器,會提示是否繼續連線,我們輸入 yes 繼續,它會保留我們的選擇,這樣就完成了無需密碼和確認直接連線遠端 linux 環境的配置操作
最後,我們就可以愉快的玩耍了