ARM シングルボード コンピューターで .NET アプリをデバッグする
- [アーティクル]
-
-
Raspberry Pi など、ARM ベースの SBC で実行されている .NET アプリをデバッグする場合は、独自の課題が発生します。 必要に応じて、Visual Studio Code と .NET SDK をデバイスにインストールし、ローカルで開発できます。 ただし、デバイスの性能上、ローカルでのコーディングとデバッグは理想的ではありません。 さらに、C# 用 Visual Studio Code 拡張機能は、32 ビット ARM オペレーティング システムと互換性がありません。 そのため、ARM デバイス上の Visual Studio Code での IntelliSense やデバッグなどの機能は、64 ビット システムでのみサポートされます。
これらの理由から、開発用コンピューターでアプリを開発し、リモート デバッグのためにそのデバイスにアプリを展開することを強くお勧めします。 デバイス上でローカルで開発およびデバッグする場合は、次のものが必要です。
この記事の残りの部分では、開発用コンピューターからリモートでシングルボード コンピューター上の .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 が構成されていることを確認します。
重要
OpenSSH ではコマンド ラインでのパスワードの受け渡しがサポートされていないため、この例では、デバイスでパスワードレス SSH を構成する必要があります。 パスワードを使用する必要がある場合は、ssh を Plink ツールを置き換えることを検討してください。
SBC に Visual Studio リモート デバッガーをインストールする
SBC 上の Bash コンソール内で (ローカル セッションまたは SSH 経由で)、次のコマンドを実行します。 次のコマンドを実行すると、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 ファイルがない場合は、 [実行] タブに切り替え、 [create a launch.json file](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>
の形式で指定してください。
ARM シングルボード コンピューターへの .NET アプリの展開に関する記事の説明に従って、アプリを展開します。 配置パスは、launch.json 構成の cwd
パラメーターに指定されているのと同じパスにしてください。
Visual Studio Code の [実行とデバッグ] タブで、launch.json に追加した構成を選択し、[デバッグの開始] を選択します。 アプリがデバイス上で起動します。 デバッガーを使用して、ブレークポイントの設定、ローカルの検査などを行うことができます。
Windows 上の Visual Studio からデバッグする
Visual Studio では、リモート デバイス上の .NET アプリを SSH 経由でデバッグできます。 デバイス上で特殊な構成は必要ありません。 Visual Studio を使用して .NET をリモートでデバッグする方法の詳細については、SSH を使用した Linux 上の .NET のリモート デバッグに関する記事を参照してください。
フレームワークに依存するデプロイをデバッグする場合は、必ず dotnet
プロセスを選択してください。 そうしない場合、プロセスにはアプリの実行可能ファイルと同じ名前が付けられます。