vscode配置遠端linux系統除錯

magicdmer發表於2023-10-19

前言

我的主力環境是 Windows 系統,但是同樣需要維護一些 linux 工程程式碼。一般情況下,只需要開個 vmware 虛擬機器,裝個 linux 系統就可以進行修改,編譯和除錯操作,但是有時候我卻需要對 linux 真機環境進行遠端除錯,這時候如果能直接在 windows 系統載入 linux 工程程式碼進行遠端除錯,那當然是最好不過的。經過後續的調查,發現有兩個方案,一個是使用 VisualGDB 外掛,一個是直接使用 vscode ,其中 VisualGDB 外掛是最傻瓜的,配合 visual stduio 使用,但是我們需要尋找特別版,且需要熟悉其使用方法和配置,vscode 就相對輕量簡單,大家可以根據自己的需求選擇方案,這裡介紹一下 vscode 配置遠端linux除錯的方法

流程

首先是編寫 vscodelaunch.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"
        }
    ]
}

這裡要注意下面幾個欄位:

  1. processId,這個需要填寫 pickRemoteProcess, 而本地除錯是 pickProcess 很容易被忽略
  2. sourceFileMap,這個是原始檔對映,我們在linux編譯環境編譯test除錯版程式後,test程式自身會包含程式碼所在的位置資訊,我們需要在這裡把原本的位置資訊對映到本地的對應目錄
  3. pipTransport,這個就是用來遠端掛載目標機器除錯程式的配置資訊,下面進行詳細描述

pipeTransport 的配置

我們上面的配置檔案使用 ssh 來進行遠端通訊,其中 OpenSSH 程式應該在 win10 之後都是自帶的,大家可以自行檢視,如果沒有的話可以自行安裝一個即可

我們使用 vscode 的 Remote - SSH 系列外掛後,開啟遠端系統上的原始碼資料夾,vscode 會彈框提示我們輸入使用者密碼,但是我們進行 pipTransport 遠端配置的時候,它是不會彈框提示我們輸入密碼的,我們必須配置一種可以無需輸入密碼,無需確定,直接 ssh 遠端目標機器的方法,流程如下:

  1. 生成本地 ssh 的key檔案
    ssh-keygen -t rsa
    
    ssh-keygen 也是 openssh 目錄中自帶的程式,執行後預設是在本地使用者目錄下的 .ssh 目錄下
  2. 然後我們需要將生成的key檔案複製到需要除錯的 linux 機器,這裡使用 ssh-copy-id 工具,這個工具 openssh 沒有自帶,需要安裝 git-for-windows 或者 msys64 交叉編譯環境,使用其自帶的:
    ssh-copy-id root@192.168.50.120
    
    它會自動從當前系統的使用者目錄下的 .ssh 目錄中複製對應檔案到目標機器,寫入相關配置檔案,如果需要指定目錄檔案,可以使用 -i 選項指定證書檔案
  3. 然後我們使用 cmd 命令列,用 ssh 連線一次遠端機器,會提示是否繼續連線,我們輸入 yes 繼續,它會保留我們的選擇,這樣就完成了無需密碼和確認直接連線遠端 linux 環境的配置操作

最後,我們就可以愉快的玩耍了

相關文章