Atmel StudioでArduinoのスケッチをデバッグして見る

〔Arduino M0 Proの使い方に戻る〕


前ページでも書いたのですが、 コンパイルしたものをArduino M0 Pro(Zero Pro)に上手く書き込んで
動作させる事が出来ませんでしたが、
デバッグは動作する様です。その方法を記述して置きます。

@ デバッグ用スケッチを準備します、下記スケッチでテストします。
  int num ;

  void setup() {
       pinMode(13, OUTPUT);
       num = 0 ;
  }
  void loop() {
       int a ;

       num++ ;
       digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
       delay(200);               // wait for a 200ms
       digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
       a = num ;
       delay(200);               // wait for a 200ms
  }
A Arduinoボードは"Progrmming port"に接続をして置きましょう。
  前回のコンパイル記述ページを参照し、上スケッチで[Build Solution]を実行させます。
  AtmelStudio画面0 実行前に、"Debug"で有る事を確認して置きます。

  コンパイルが正常終了したら一旦[保存]しましょう。

AtmelStudio画面1
 B ”Atmel Studio”メニューバーの
   [File]→[Close Solution]を順番に
   クリックし、一旦終了させます

   左の画面が表示された場合は[Yes]を
   クリックしましょう。



C ”Atmel Studio”メニューバーの[File]→[Open]→[Open Object File For Debuggimg]を順番に
  クリックします。

OpenObjectFileForDebuggimg画面1
赤丸矢印の部分をクリックすると、エクスプローラのファイル選択画面が表示されます、
その画面を操作して"Sketch1.elf"ファイルを選びます。
"[6.2]フォルダ" → "[Sketch1]フォルダ" → "[Sketch1]フォルダ" →
"[Debug]フォルダ" → "Sketch1.elf ファイル"を順番に開きます。
開いたら[Next]ボタンをクリックします。

OpenObjectFileForDebuggimg画面2
「Device Family」で"SAM D,32-bit"を選択して、
表示される一覧から"ATSAMD21G18A"を選び[Finish]ボタンをクリックします。

・・・・・しばらくお待ちください・・・・・


AtmelStudio画面2
 D 左図、"Sketch1.cpp"をダブルクリックすればスケッチが
   表示されます。


 E ”Atmel Studio”の右上ツールバーを見て下さい。
   [No Tool]とアイコンが表示されていると思います。

   AtmelStudio画面2
   [No Tool]アイコンをクリックします、
   下記画面が表示されるでしょう。

AtmelStudio画面3
[Tool]タブにある"Selected debugger/programmer"の項で"EDBG"を選びます。
(もちろんArduinoが接続されていないとだめですよ、念の為に)
選んだら、「Skech1.cpp」に戻りましょう。

デバッグ準備完了、レッツトライ!デバッグ d(⌒ー⌒)

《Challeng Debug》

デバッグツール画面1  @ の横▲アイコン(又はF5キー)でデバッグ開始です。
   上記のEを操作していなかった場合は、この開始の時に上記画面が
   表示されるので"Debug Tool"の設定を行います。
 A の■アイコン(又はCtrl+Shift+F5キー)でデバッグ終了です。

デバッグツール画面2

 B [Break All]ボタン(又はCtrl+F5キー):デバッグ動作を一時停止させます。
 C [Continue]ボタン(又はF5キー):一時停止したデバッグを再開させます。
 D [Step Into]ボタン(又はF11キー):プログラムを1行ずつ実行させます。
 E [Step Over]ボタン(又はF10キー):関数の行は飛ばして次の行で停止。(関数の中は実行されます)
 F [Step Out]ボタン(又はShift+F11キー):実行中の関数中で有ればそれ以降は飛ばして関数から
   抜け出て関数行の次の行で停止します。
 G [Run To Cursor]ボタン(又はCtrl+F10キー):カーソルの有る行まで実行させます。
 H [Reset]ボタン(又はShift+F5キー):デバッグを最初から実行(リセット)させます。

AtmelStudio画面4
 実行させると、この様にデバッグを行う為のウインドウ画面が表示されます。
 この画面はデバッグを一時中断させた所で、delay関数の中で停止した模様です。

《ブレークポイントについて》

デバッグ-ブレイクポイント画面1 ブレークポイントとは、プログラムが実行され指定
ポイントで一時停止します、
そこで変数の内容等を確認する事が出来ます。

ブレークポイントを設置したい行の矢印部分を
クリックします。
再度クリックすれば解除されます。

デバッグ-ブレイクポイント画面2   デバッグを実行させれば左図の様に表示され、
  プログラムは一時停止します。


デバッグ-ブレイクポイント画面4  この様に表示された場合はブレークポイントが設置できない場合です。
 プログラムソースに行は有るが、意味のない行としてコンパイラがコードを
 生成していないのかも? (な〜あぜぇ〜)


トレースポイント

デバッグ-トレースポイント画面1
上図、矢印の様にトレースポイントを設置したい行でマウスの右ボタンをクリックします。
表示されるサブメニュを辿り「Insert Tracepoint」まで順に操作クリックします。

デバッグ-トレースポイント画面2
矢印の部分を書き換えます、”num = {num} ”と変更して[OK]ボタンをクリックします。
デバッグ-トレースポイント画面3  とこの様に表示されるでしょう

デバッグ-トレースポイント画面4
デバッグを実行させ、右下のウインドウで[Output]タブをクリックします、
この様に[Output]ウインドウ画面に、
トレースポイント設置行が実行される度にメッセージが表示されます
(・・・・んん、同じ文字が3回ずつ表示されているのが解せない!)

《変数内容の確認と設定》

デバッグ-ブレイクポイント画面3  デバッグが一時停止したら、
 左図なら"num"変数マウスカーソルを移動させれば、
 左図の様に変数内容が表示されます

 "num++"は実行されていないので、num=0の状態ですね、
 再開させれば、再びこの行で停止し、num=1となるはずですね。

[num:0x00000000]の部分をクリックして値を変更し[RETURN]キーを押せば変数内容も変更可能です。

Watchウインドウで変数の値を見る場合

デバッグ-Watch画面2  デバッグ-Watch画面1  このメガネアイコン[QuickWatch]を
 クリックします。

 左画面が表示されます。
 図の「Expression」の場所に表示させたい
 変数名を入力、例は"num"です
 次に[Add Watch]ボタンをクリックします。


 下図の様にウオッチウインドウに変数と値が
 追加されています。
 「Value」の部分をクリックすれば値の変更も
 可能です。

デバッグ-Watch画面2


《シリアルモニター》

シリアルモニター画面
 赤丸印のモニターアイコンをクリックすればモニターが表示されます。
 ArduinoIDEのシリアルモニターと同様です。


《その他》

※ このデバッグ操作でArduinoへ書き込まれたスケッチは正常動作するのですよねぇ。
  何処が異なるのでしょう?

※ デバッグ操作でバグが判明してもスケッチの編集コンパイルを行うには、
  コンパイル操作に切り替えて変更コンパイルして、又、デバッグ操作に切り替えるなんて事を
  行わないとダメっぽいなのですがぁ....ちょっとぉ、めんどいよねぇ。

※ なんかぁ、デバッグのステップ動作がぁ、スケッチの記述通りに動いていない様な気がぁ...
  なんかぁ、スケッチ通りにコンパイルしてんのぉ、ブレークポイント設置出来ない所が有るなんてぇ

※ もお、"Arduino.ORG"さん、ちゃんとぉ"Atmel"さんと製品仕様等の摺り合わせお願い!!。
  あれれぇ、"Arduino Studio"?なに!、"Arduino IDE"から切り替える気かしら(2015.06.13)


[前ページ:”Arduinoに書込んでみる”へ]





【きむ茶工房ガレージハウス】
Copyright (C) 2006-2015 Shigehiro Kimura All Rights Reserved.