🖥
Visual Studioでラズパイをデバッグしよう
.NETでラズパイのアプリケーションを開発できることを知りました。
また、Visual Studioを使ってデバッグ(ブレーク、ウォッチ等)ができることを知りました。
開発環境の構築について、備忘録として記載します。
作業の流れ
- ① ラズベリーパイのセットアップ
- ② ホストマシンにて、コードを作成
- ③ ホストマシンにて発行を行い、プログラムをラズパイへ配置
- ④ ターゲットにて、プログラム(プロセス)を実行
- ⑤ ホストマシンからプログラム(プロセス)へアタッチ
- ⑥ ホストマシンからデバッグ作業
環境
- ホストマシン
- Windows 11 Home
- 23H2
- Visual Studio
- Community
- Windows 11 Home
- ターゲット
- RaspberryPi 4B
- Linux pi4home 5.15.32-v8+ #1538 SMP PREEMPT Thu Mar 31 19:40:39 BST 2022 aarch64 GNU/Linux
- 説明の便宜上、ユーザ名/IPアドレスは下記で説明
- ユーザ名 : pi
- IPアドレス : 192.168.11.60
- RaspberryPi 4B
手順
作業の流れに沿って、記載します。
① ラズベリーパイのセットアップ
- SSHの有効化
- .NETのインストール
- sambaの設定
SSHの有効化
- GUIまたは、raspi-configコマンドよりSSHを有効化する
- コマンドの場合は、"Interface Options" -> SSH を選択し、有効化
- コマンドの場合は、"Interface Options" -> SSH を選択し、有効化
- teraterm等で接続を確認する
.NETのインストール
- 下記のコマンドより.NETをインストールする
$ curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --channel LTS
- 2023.03.20時点では、.NET8がインストールされる(注釈参照)
- 環境変数を追加する
$ echo 'export DOTNET_ROOT=$HOME/.dotnet' >> ~/.bashrc $ echo 'export PATH=$PATH:$HOME/.dotnet' >> ~/.bashrc $ source ~/.bashrc
- インストールを確認する(バージョンを確認)
$ $ dotnet --version 8.0.203
sambaのインストール、設定
- ホストマシンからファイルの読み書きをするためにsambaをインストールする
$ sudo apt-get update $ sudo apt-get install samba
- sambaの設定ファイルをエディタで開く
$ sudo vi /etc/samba/smb.conf
- 下記を追加し、保存する
[raspberrypi] comment = Raspberry Pi path = /home/pi public = yes guest ok = yes read only = no browsable = yes force user = pi strict sync = yes
- sambaを再起動させる
$ sudo service smbd restart
- アクセスを確認する
- ホストマシンからアクセス(読み込み、書き込み)を確認
② ホストマシンにて、コードを作成
簡単なコードで確認する
- "新しいプロジェクトの作成"を選択
- "コンソール アプリ"を選択して、"次へ"を選択
- プロジェクト名の構成を入力し、"次へ"を選択
-
- "HelloPi"は任意の名前で可
-
- ".NET8.0(長期的なサポート)"を選択し、"作成"を選択
- ラズパイにインストールした.NETのバージョンとフレームワークを合わせることが重要
- コードは下記とする
namespace HelloPi { internal class Program { static void Main(string[] args) { for (int i = 0; i < 1000; i++) { if (i % 2 == 0) { Console.WriteLine($"{i} is even"); } else { Console.WriteLine($"{i} is odd"); } Thread.Sleep(1000); } } } }
- 便宜上、プログラムがすぐに終了しないようにしている
- ホストマシンで実行すると、下記の出力がされる
0 is even 1 is odd 2 is even 3 is odd 4 is even 5 is odd ...
③ ホストマシンにて発行を行い、プログラムをラズパイへ配置
- ラズパイ側でプログラムを配置するディレクトリを作成する
$ mkdir HelloPi $ cd HelloPi $ pwd /home/pi/HelloPi
- 任意のディレクトリで可
- Visual Studio側で、プロジェクトを選択し、"発行"を選択
- "フォルダ"を選択し、"次へ"
- "フォルダ"を選択し、"次へ"
- "\192.168.11.60\raspberrypi\HelloPi"を指定し、"完了"
- デバッグが目的のため、"すべての設定を表示" -> "構成"にて"Debug | Any CPU"を選択し、"保存"
- "発行"を選択
- ラズパイ側にビルド結果が配置される
④ ターゲットにて、プログラム(プロセス)を実行
- ラズパイ側でHelloPiを実行する
⑤ ホストマシンからプログラム(プロセス)へアタッチ
- Visual Studio側で、メニューバー"デバッグ" -> "プロセスにアタッチ"を選択
- "接続の種類"を"SSH"、"接続先"をラズパイのIPアドレスを入力後、"更新"を選択
- "ユーザ名"、"認証の種類"、"パスワード"を入力し、"接続を選択"
- ※警告がでますが、ぞうっこう
- 使用可能なプロセスから、dotnetのプロセスを選択し、"アタッチ"
- "マネージド(Unix用 .NET Core)"を選択し、"OK"
- エラーが出なければアタッチ完了
⑥ ホストマシンからデバッグ作業
- アタッチができていれば、ブレークを入れると停止できる
ステップ実行、ウォッチなど一連の機能が使えます🎉
その他
再アタッチ
- 一度アタッチすれば、次からは再アタッチできる
自己完結型の指定
- 自己完結型を指定すると、.NET ライブラリやターゲット ランタイムなど、アプリのすべてのコンポーネントが格納される
- この場合、ターゲットのプラットフォームを指定する必要がある
- 上記状態の場合、各ライブラリ群も配置される
- この場合、ターゲットのプラットフォームを指定する必要がある
参考文献
- Microsoft - .NET の IoT ライブラリのドキュメント
- Qiita - Raspberry PIでDotNet環境を構築
- Kindle本 - .NETではじめるRaspberry Pi プログラミング 著:Rusk
Discussion