Visual Studio用のArduino開発プラグインを試してみた

Arduinoの開発環境は、PCなどの環境と比べるとデバッグが大変です。
iPhoneやAndroidはエミュレータを使って開発できますが、Arduinoはデバイスが外部につながっているのでエミュレーションが通用する範囲は限界があります。

とはいえ、ステップ実行や実行中に変数の内容を確認するくらいは、できて欲しいものです。
以前も書いたように、私もESP8266用PNGデコーダはVisual Studioで開発してからESP8266へポーティングしていました。

今回Arduboyの開発を調べていたら、Visual Studio 2015にはArduino開発用プラグインがあることを知り、試してみました。
これはサードパーティ製のツールのようで、無料で使えます。有償のプロフェッショナル版もあります。

インストール方法など、参考にした記事はこちらです。

Arduboy開発にVisual Studioを使う – Qiita

また、本家のマニュアルはこちらです。

Table of Contents – Arduino IDE for Visual Studio and Atmel Studio

このプラグインを入れると、一応ブレークポイントを設定したり、実行時の変数の内容を確認することができるようになります。
(ただし、確認したい内容が変わるごとにビルドしてアップロードしなければならないようですが・・・)

このデバッガ機能は有償版にしかありませんが、インストール後45日間は無料で使えます。
有償版の料金は、学生/ホビイスト向けは$25/1CPU、$45/3CPU、商用版は$75/1CPU~となっています。

というわけで45日間しか使えないデバッグ機能を試してみました。

インストール後はVisual Studioに下図のようなツールボタンが追加されます。
ハイライトされているのがビルド&アップロード&実行のボタンです。

vMicro01.png

また、「開く」メニューに「Arduino Project」が追加されます。
Arduino用.inoファイルを選択すると、Visual Studio用のプロジェクトファイルが生成されます。
(このファイルにはArduino IDE関係の情報なども書き込まれているようで、Arduino IDEのディレクトリを変更するなどしたときは、プロジェクトファイルを一旦削除しないと動作がおかしくなることがありました。)

vMicro02.png

これでどの程度デバッグができるのか、試してみました。
実験に使うコードはArduboy用ブロック崩しです。

まず、ブレークポイントを設定します。
すると、ブレークポイントの右上に歯車アイコンが現れます。
ここでブレークポイントでの処理内容を設定をします。

vMicro03.png

処理内容として、ラケットの位置を表す変数racketの内容を監視してみます。

「アクション」にチェックを入れます。
「出力ウインドウにメッセージを記録する」の欄は、

{変数名=?}

という文字列があると、変数名で指定した変数の値を観測できます。
今回は

racket={racket=?}

と記入しておきます。
「実行を続行します」をチェックすると、ブレークポイントでも停止しなくなります。

vMicro04.png

この状態でプログラムをビルドしてアップロードすると、Arduboy側で動作しているプログラムのログがPC側の画面に出力されます。
ログに含まれている変数の値は、別ウインドウで確認することができます。

vMicro05.png

同時に1つ以上の変数をチェックすることもできます。
ボールの座標を表示させてみました。

vMicro06.png
vMicro07.png

また、「条件」を設定すると、条件が成立したときのみブレークポイントを有効にすることができます。
以下の例では、ボールのY座標がSCRNHEIGHT-1より大きいとき、Y座標を出力して停止します。

vMicro08.png

設定できる条件には、変数の値の条件以外にHit Countでも行えます。
これは関数milis()の値が、(1)指定した値のとき(2)指定した値の整数倍のとき(3)指定した値以上のとき に成立します。
milis()は時間ですので、一定時間おきにブレークポイントを有効にすることができます。
また、milis()の代わりに自分でヒットカウンターを指定することもできます。この設定はプロパティウインドウで行えます。

vMicro09.png

ブレークポイント全体の管理は、Visual Studioのブレークポイントウインドウで行えます。

vMicro10.png

感想ですが、とりあえず変数の内容が確認できるだけでも大助かり、というところではあります。

しかし、一旦ビルドしたプログラムを後からあれこれブレークポイントを設定したり、好きなところで一時停止させてその時点の変数の値を調べる、といったことはできないようです。
かろうじて、設定したブレークポイントを無効にすることはできます(歯車アイコンの隣のアイコン)。
その場合でもログファイル自体は出力され続けますので、コンティニューボタンを押しっぱなしにすることに相当するようです。
それ以上の変更(ブレークポイントの追加や条件の変更)を行った場合、再度ビルド→アップロードの手順が必要になります。

自分で手間をかけてシリアルポートにprintfしても、まあまあ同じようなことはできます。
ソースコードを汚さずにGUIから各種設定をできるところが大きなメリットだと思います。
ボードにデバッグ機能が付いたArduino M0 Pro Atmel Studioでもデバッグはできますので、用途に合わせてということになるでしょう。

なお、今回使用したVisual MicroはESP8266版Arduinoでも使えるようですので、そのうち試してみたいと思います。

Arduino ESP8266 in the Visual Studio IDE

コメント

  1. やまと より:

    Exoressionsの画面がでないのですが、どのようにすれば出力されますか。
    またステップ実行を押すと、処理が止まらず、最後まで行ってしまうのですが原因はなんでしょうか

    宜しくお願いします

  2. boochow より:

    やまとさん
    う~ん、すみませんが5年以上も前の記事なので、ちょっと思い出せないです。