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に下図のようなツールボタンが追加されます。
ハイライトされているのがビルド&アップロード&実行のボタンです。
また、「開く」メニューに「Arduino Project」が追加されます。
Arduino用.inoファイルを選択すると、Visual Studio用のプロジェクトファイルが生成されます。
(このファイルにはArduino IDE関係の情報なども書き込まれているようで、Arduino IDEのディレクトリを変更するなどしたときは、プロジェクトファイルを一旦削除しないと動作がおかしくなることがありました。)
これでどの程度デバッグができるのか、試してみました。
実験に使うコードはArduboy用ブロック崩しです。
まず、ブレークポイントを設定します。
すると、ブレークポイントの右上に歯車アイコンが現れます。
ここでブレークポイントでの処理内容を設定をします。
処理内容として、ラケットの位置を表す変数racketの内容を監視してみます。
「アクション」にチェックを入れます。
「出力ウインドウにメッセージを記録する」の欄は、
{変数名=?}
という文字列があると、変数名で指定した変数の値を観測できます。
今回は
racket={racket=?}
と記入しておきます。
「実行を続行します」をチェックすると、ブレークポイントでも停止しなくなります。
この状態でプログラムをビルドしてアップロードすると、Arduboy側で動作しているプログラムのログがPC側の画面に出力されます。
ログに含まれている変数の値は、別ウインドウで確認することができます。
同時に1つ以上の変数をチェックすることもできます。
ボールの座標を表示させてみました。
また、「条件」を設定すると、条件が成立したときのみブレークポイントを有効にすることができます。
以下の例では、ボールのY座標がSCRNHEIGHT-1より大きいとき、Y座標を出力して停止します。
設定できる条件には、変数の値の条件以外にHit Countでも行えます。
これは関数milis()の値が、(1)指定した値のとき(2)指定した値の整数倍のとき(3)指定した値以上のとき に成立します。
milis()は時間ですので、一定時間おきにブレークポイントを有効にすることができます。
また、milis()の代わりに自分でヒットカウンターを指定することもできます。この設定はプロパティウインドウで行えます。
ブレークポイント全体の管理は、Visual Studioのブレークポイントウインドウで行えます。
感想ですが、とりあえず変数の内容が確認できるだけでも大助かり、というところではあります。
しかし、一旦ビルドしたプログラムを後からあれこれブレークポイントを設定したり、好きなところで一時停止させてその時点の変数の値を調べる、といったことはできないようです。
かろうじて、設定したブレークポイントを無効にすることはできます(歯車アイコンの隣のアイコン)。
その場合でもログファイル自体は出力され続けますので、コンティニューボタンを押しっぱなしにすることに相当するようです。
それ以上の変更(ブレークポイントの追加や条件の変更)を行った場合、再度ビルド→アップロードの手順が必要になります。
自分で手間をかけてシリアルポートにprintfしても、まあまあ同じようなことはできます。
ソースコードを汚さずにGUIから各種設定をできるところが大きなメリットだと思います。
ボードにデバッグ機能が付いたArduino M0 Pro とAtmel Studioでもデバッグはできますので、用途に合わせてということになるでしょう。
なお、今回使用したVisual MicroはESP8266版Arduinoでも使えるようですので、そのうち試してみたいと思います。
コメント
Exoressionsの画面がでないのですが、どのようにすれば出力されますか。
またステップ実行を押すと、処理が止まらず、最後まで行ってしまうのですが原因はなんでしょうか
宜しくお願いします
やまとさん
う~ん、すみませんが5年以上も前の記事なので、ちょっと思い出せないです。