對 ARM 單板電腦上的 .NET 應用程式進行偵錯
對 ARM 型單板電腦上執行的 .NET 應用程式 (例如 Raspberry Pi) 進行偵錯是個很獨特的挑戰。 如有需要,您可以在裝置上安裝 Visual Studio Code 和 .NET SDK,並在本機進行開發。 不過,裝置的效能讓在本機撰寫程式碼和偵錯的結果並不理想。 此外,C# 的 Visual Studio Code 擴充功能與 32 位元 ARM 作業系統不相容。 因此,只有 64 位元系統才能支援在 ARM 裝置上使用 Visual Studio Code 的 IntelliSense 和偵錯等功能。
基於以上原因,強烈建議您在開發電腦上開發應用程式,然後將應用程式部署至裝置以進行遠端偵錯。 若您想要在裝置本機開發及偵錯,則需要下列條件:
本文的其餘部分說明如何從開發電腦對單板電腦上的 .NET 應用程式進行遠端偵錯。
重要
截至本文撰寫時,在 linux-arm
環境中對 .NET 7 應用程式進行遠端偵錯十分不可靠,且可能會導致流程提前結束。 正對此問題進行調查。 以 linux-arm
為目標的 .NET 6 應用程式以及以 linux-arm64
為目標的 .NET 7 應用程式不會受到影響。
從 Visual Studio Code 對單板電腦上的 .NET 進行偵錯,需要 SBC 和專案的 launch.json 檔案中的設定步驟。
遠端偵錯需要 SSH。 若要在 Raspberry Pi 上啟用 SSH,請參閱 Raspberry Pi 文件中的啟用 SSH (英文)。 請確定您已設定 無密碼 SSH (英文)。
在 SBC 上安裝 Visual Studio 遠端偵錯工具
在 SBC (或在本機工作階段中或透過 SSH) 的 Bash 主控台內執行下列命令。 此命令會在裝置上下載並安裝 Visual Studio 遠端偵錯工具:
curl -sSL https://aka.ms/getvsdbgsh | /bin/sh /dev/stdin -v latest -l ~/vsdbg
在 Visual Studio Code 中設定 launch.json
在開發電腦上將啟動組態新增至專案的 launch.json。 若專案沒有 launch.json 檔案,請切換至 [執行] 索引標籤,接著選取 [建立 launch.json 檔案],然後在對話方塊中選取 [.NET] 或[.NET Core],以新增一個檔案。
launch.json 中的新組態看起來應該類似下列其中一項:
"configurations": [
{
"name": ".NET Remote Launch - Self-contained",
"type": "coreclr",
"request": "launch",
"program": "~/sample/sample",
"args": [],
"cwd": "~/sample",
"stopAtEntry": false,
"console": "internalConsole",
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "ssh",
"pipeArgs": [
"pi@raspberrypi"
],
"debuggerPath": "~/vsdbg/vsdbg"
}
},
請注意:
program
是由 dotnet publish
所建立的可執行檔。
cwd
是在裝置上啟動應用程式時要使用的工作目錄。
pipeProgram
是本機電腦上 SSH 用戶端的路徑。
pipeArgs
是要傳遞至 SSH 用戶端的參數。 請務必指定密碼參數,並指定 pi
使用者的格式為 <user>@<hostname>
。
"configurations": [
{
"name": ".NET Remote Launch - Framework-dependent",
"type": "coreclr",
"request": "launch",
"program": "~/dotnet/dotnet",
"args": ["~/sample/sample.dll"],
"cwd": "~/sample",
"justMyCode": false,
"stopAtEntry": false,
"console": "internalConsole",
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "ssh",
"pipeArgs": [
"pi@raspberrypi"
],
"debuggerPath": "~/vsdbg/vsdbg"
}
},
請注意:
program
是裝置上 .NET 執行時間的路徑。
args
是裝置上要偵錯的組件的路徑。
cwd
是在裝置上啟動應用程式時要使用的工作目錄。
justMyCode
設定為 false
,以確保偵錯工具在應用程式程式碼中的中斷點中斷。
pipeProgram
是本機電腦上 SSH 用戶端的路徑。
pipeArgs
是要傳遞至 SSH 用戶端的參數。 請務必指定密碼參數,並指定 pi
使用者的格式為 <user>@<hostname>
。
請依將 .NET 應用程式部署至 ARM 單板電腦中所述部署應用程式。 請確定部署路徑與 launch.json 組態中 cwd
參數所指定的路徑相同。
在 Visual Studio Code 的 [執行和偵錯]索引標籤上,選取您新增至 launch.json 的組態,然後選取 [開始偵錯]。 應用程式會在裝置上啟動。 偵錯工具可用來設定中斷點,以及檢查區域變數等等。
從 Windows 上的 Visual Studio 進行偵錯
Visual Studio 可以透過 SSH 對遠端裝置上的 .NET 應用程式進行偵錯。 裝置上不需要特定的設定。 如需使用 Visual Studio 從遠端偵錯 .NET 的詳細資訊,請參閱使用 SSH 在 Linux 上進行遠端偵錯。
若您要偵錯與架構相依的部署,請務必選取 dotnet
流程。 否則流程的名稱會被命名成和應用程式可執行檔相同。