【Raspberry Pi + C#】VSからラズパイ上でデバッグ

C#

やりたいこと

C#の楽さを組込開発にも取り入れたいと思い、リアルタイム性が必要ない部分に関してシングルボードコンピュータ(とりあえずラズパイ)を使いたいなぁと思っています。

それにはまず、開発環境からラズパイ上のプロセスをデバッグできないと効率が悪い。ということで、Windows上のVisual Studio 2022からラズパイ上で実行しているプロセスに対してデバッグできる環境を整えた記録です。

Raspberry Pi OS

私はIC入手難の時期でも何とか入手できたRaspberry Pi 400を使いましたが、Raspberry Pi 4などでも同じだと思います。

ラズパイにOSを書き込む際には「Raspberry Pi OS x64」を使用するようにしてください。

ちなみにこの記事ではRaspberry Pi 400にモニタとマウスをつないで、ラズパイもGUIな環境で動かしています。CUI慣れしていないもので・・・。

ラズパイへの.net 6 インストール

次に以下の「フレームワーク依存アプリの展開」を参考に、.net 6をインストールします。

ARM シングルボード コンピューターに .NET アプリを配備する - .NET
Raspberry Pi などの ARM シングルボード コンピューター (SBC) に .NET アプリを配備する方法について説明します。

ちなみに以下のコマンドは、「.bashrc」というファイルの最後に環境変数を追加して再読み込みしているだけです。

echo ‘export DOTNET_ROOT=$HOME/.dotnet’ >> ~/.bashrc
echo ‘export PATH=$PATH:$HOME/.dotnet’ >> ~/.bashrc
source ~/.bashrc

https://docs.microsoft.com/ja-jp/dotnet/iot/deployment

CUI慣れしていない場合、スペースを打ち間違った等で修正したい時などに焦りますが、ラズパイのファイルマネージャから「/home/pi/.bashrc」をダブルクリックすれば、GUIのテキストエディタが開きますので直すのも簡単です。直した後はターミナルウインドウを閉じて開きなおせば大丈夫です。

プロジェクトの作成とビルド

Visual Studio 2022から、コンソールアプリを作成します。フレームワークは.net 6.0を選択しました。

後は適当なLEDチカチカプログラムを作ってください。

ビルドしたアプリケーションの配置

ビルドしたものをラズベリーパイにコピーする方法は「ラズパイへの.net 6 インストール」のリンク先に記載されています。が、私は結局ラズパイ上でsambaを動かしてコピーしています。

デバッグのためアタッチ

ここからが本題です。以下を参考にSSHサーバーのインストールをしてください。

Linux 上で .NET Core をデバッグする - Visual Studio (Windows)
プロセスにアタッチし、アプリをビルドしてデプロイし、デバッガーをアタッチして、Secure Shell (SSH) を使用して Linux 上で .NET Core および .NET 5 以降のアプリケーションをデバッグします。

その後デバッグビルドを行ったdllをラズパイ上で実行して、LEDをチカチカさせましょう。
xxx.dllが生成されたなら、「dotnet xxx.dll」です。

次はWindows側のVisual Studioから、ラズパイ上で実行中のプロセスにアタッチしましょう。
「メニュー -> デバッグ ->プロセスにアタッチ」を選んで、アタッチするプロセスを指定します。

接続の種類に「SSH」を選択します。
接続先にラズパイのホスト名を手動で入力します。デフォルトは「raspberrypi」だと思います。入力すると、おそらくユーザー名とパスワードを聞かれると思いますので、SSHで接続する時のものを入力してください。
接続が成功すれば「使用可能なプロセス」の更新ボタンを押せばプロセスが表示されるはずです。
その中からプロセス「dotnet」を探して、自分の作ったdllが実行されている物(上記だと「dotnet StateLed.dll」)を選択して「アタッチ」を押します。

上図のダイアログが開くので、「マネージド(Unix用.NET Core)」を選択してOK。

うまくアタッチできれば、Visual Studioのツールバーがデバッグ中によく見る状態になるはずです。
LEDチカチカの点灯と消灯にそれぞれブレークポイントを設定してみると、そこで止まると同時に、LEDチカチカも止まり、ちゃんと変数のチェックもできます。

コード修正後の再アタッチ

デバッグの結果コードを修正した場合、ビルドしたものをラズパイにコピーし、プロセスを実行しなおします。

その後は「メニュー -> デバッグ ->プロセスに再アタッチする」を選べば、先ほどアタッチしたプロセスをつないでくれます。

タイトルとURLをコピーしました