デバッグ効率化のためのブレークポイントのコツ

ブレークポイントの概念は非常に単純で、指定された命令の直前でプログラムの実行を中断するだけです。ハードウェアにもソフトウェアにも実装できます。単純ではありますが、複雑な条件の組み合わせにも使用できます。ここでは、デバッグ効率化のために、ブレークポイントを最大限に活用する方法をご紹介します。

IAR Embedded Workbenchでは、以下のブレークポイントを使用できます。

  • コードブレークポイント
  • 条件付きコードブレークポイント
  • 読出しおよび書込みデータブレークポイント
  • データログブレークポイント
  • ログブレークポイント
  • パワーブレークポイント
  • トレース開始/停止ブレークポイント

この記事では、アプリケーションのデバッグを高速化するためのヒント、および各種ブレークポイントを有効利用するためのヒントを示します。

コードブレークポイント

これは最も簡単に使えるブレークポイントです。必要なのはCソースの行、または逆アセンブリウィンドウ内で命令を選び、ブレークポイントをON/OFF切替するだけです。プログラムの実行がこのブレークポイントに達すると、アプリケーションは停止します。この時点で、変数の値やフラグ、レジスタのチェックなど、あらゆる操作を行うことができます。

 

デバッグ効率化のためのブレークポイントのコツ1

コードブレークポイントの上限数はハードウェアブレークポイントの数になりますが、ソフトウェアブレークポイントを使用する場合やRAM上でアプリケーションを実行する場合には、制限はありません。また、使用可能なブレークポイント数が制限されている場合、例えば、Arm Cortex-M4~7のように6~8個に制限されている場合でも、その場所を保存し、必要に応じてブレークポイントを無効にしたり有効にしたりすることができます。View ->Breakpoints window(表示→ブレークポイントウィンドウ)を選択して表示し、ボックスをセットまたはクリアするだけで、ブレークポイントを有効または無効にすることができます。

デバッグ効率化のためのブレークポイントのコツ2

こうすることで6~8個以上のブレークポイントをセットできますが、すべてを同時にアクティブにすることはできません。この場合IAR Embedded Workbenchが有するフラッシュブレークポイントが有効です。

デフォルトでは、IDEはコードブレークポイントをセットします。I-jetデバッグプローブを使用する場合は、コードの行を右クリックすることによって、明示的にフラッシュブレークポイントを選ぶことができます。これは、今あるすべてのハードウェアブレークポイントを既に使用している場合に便利です。ブレークポイントの記号欄には「F」が付きます。フラッシュブレークポイント機能は、IAR Embedded Workbench for Armのバージョン7.60以降で使用できます。

 

デバッグ効率化のためのブレークポイントのコツ3

条件付きコードブレークポイント

条件付きブレークポイントは、コードブレークポイントにフラグまたは変数を条件として組み合わせたものです。ブレークポイントのセット後は、またView ->Breakpoints window(表示→ブレークポイントウィンドウ)を使ってすべてのブレークポイントを確認できますが、右クリックしてブレークポイントのEdit option(編集オプション)を選択すれば、新たなパラメータを設定することもできます。

デバッグ効率化のためのブレークポイントのコツ4

使用する構文はC言語の構文に似ており、==、>=、<=を使用できます。例えば、変数counterが10になったらブレークポイントでアプリケーションを停止したい場合は「counter==10」を使用します。

デバッグ効率化のためのブレークポイントのコツ5

これは、割込み関数内にブレークポイントが必要な場合に非常に便利です。条件を設定しないと絶えず実行が停止するので、アプリケーションをデバッグすることはできません。フラグや変数を条件として使用すれば、デバッグははるかに容易になります。さらに、条件の成立をスキップする数や、真または変更のような条件の成立の仕方を指定すれば、より複雑な処理が可能です。

読出しおよび書込みデータブレークポイント

データブレークポイントは他のブレークポイントと少し異なり、特定のメモリアドレス、フラグ、変数、またはレジスタへの読出しおよび書込みアクセスをモニタします。このブレークポイントの使い方は非常に簡単で、フラグまたは変数を右クリックして、Set data Breakpoint(データブレークポイント)を設定オプションから選択するだけです。デフォルトでは、読出しアクセスと書込みアクセスの両方をモニタします。他にも設定を追加したい場合は、View->Breakpoints window(表示→ブレークポイントウィンドウ)Edit option編集オプション)で追加してください。これらのアクセスに加えて、特定の値に一致するのをモニタすることもできます。つまり読出しおよび書き込みが特定の値に一致した場合のみ、実行の停止をトリガします。編集ボタンを選択すると新たなウィンドウが開き、そこで絶対アドレスやソース行を選択することができます。変数やフラグの場合は、自動サイズの使用を推奨します。より広い範囲をモニタする必要がある場合は、手動サイズを選び、必要なサイズで使用してください。

 

デバッグ効率化のためのブレークポイントのコツ6

データブレークポイントは、アプリケーションによってフラグや変数が破壊されるのをデバッグする際に非常に有用です。何らかのアクセスがあると、アプリケーションは停止します。もう1つの使用法は、スタックオーバフローの調査です。データブレークポイントをスタックサイズの80~90%のアドレスに設定して、オーバフローに近づいたところでアプリケーションを停止し、プログラムを1ステップずつ実行して問題の原因を突き止めることができます。

データログブレークポイント

読出しおよび書込みアクセスを伴うデータブレークポイントの他に、データログブレークポイントを使用することもできます。このブレークポイントの狙いは、特定の変数やメモリアドレスの値をタイムラインでモニタして、グラフにプロットすることです。これにより、2個以上の変数を比較して、時間的な変動やトリガ中の複数の割込みの検討も容易に行うことができます。

 

デバッグ効率化のためのブレークポイントのコツ7

I-jetオプションでは、例えば、下のスクリーンショットに示すように、タイムラインや追加的なデータログおよびデータログ一覧を選択して使用することができます。

デバッグ効率化のためのブレークポイントのコツ8

ログブレークポイント

コードブレークポイントやデータブレークポイントに加えて、ログブレークポイントを使用することもできます。これは、メッセージの出力のためプログラムの実行を一時停止する特別なブレークポイントです。実行がブレークポイントに達すると、選択したメッセージの表示を行います。

 

デバッグ効率化のためのブレークポイントのコツ9

 

実行がブレークポイントに達するたびに、デバッグログウィンドウにメッセージが表示されます。カウンタを追加すれば、アプリケーションがソースコードの該当部分を実行した回数を知ることができます。

デバッグ効率化のためのブレークポイントのコツ10

パワーブレークポイント

IAR Embedded Workbenchの電力デバッグ技術によって、消費電力をモニタして、それをソースコードに関連付けることができます。さらに、これによりアプリケーション全体の消費電力を知ることができます。また、パワーブレークポイントを追加することも可能です。閾値を、例えば25mAに設定して、消費電力がこの値を超えた時点でデバッガを停止させることができます。

デバッグ効率化のためのブレークポイントのコツ11

 

閾値の設定は非常に簡単です。必要な操作は、I-jet->PowerLog windowI-jet-Powerログウィンドウ)を開いて値を設定し、その値の上下に表示されるオプションを設定するだけです。

デバッグ効率化のためのブレークポイントのコツ12

 

この機能は、消費電力にピークが生じたり、電力値が指定値を超えたりしないようにする上で有効であり、この種の分析によってバッテリの持続時間を延ばすことができます。つまり、長時間にわたってアプリケーションを実行したままにすることができます。タイムラインウィンドウを使うことで使用中の電力に関して必要な情報が得られます。パワーブレークポイントの機能はI-jetやI-scope等の対応機器が必要です。

トレース開始/停止ブレークポイント

最後のブレークポイントとして挙げておきたいのは、トレース開始/停止ブレークポイントです。I-jet Trace for Arm Cortex-MやI-jet Trace for Cortex-A/R/Mのような高機能トレースプローブを使用できる場合は、これらのブレークポイントを活用できます。アプリケーションの一部だけを解析する場合は特に便利です。トレース開始およびトレース停止ブレークポイントの使い方は簡単で、ソースコードの行を右クリックしてトレースの開始点と終了点を指定するだけです。トレースバッファには、アプリケーションの指定したコード行間にある命令だけが保存されます。

 

デバッグ効率化のためのブレークポイントのコツ13

 

また、トレース開始ブレークポイントとトレース終了ブレークポイントの間に取得されたタイムライン内のトレースした命令からのコールスタックの概要を、グラフィックで示すことも可能です。

デバッグ効率化のためのブレークポイントのコツ14

 

I-jet Traceのようなトレースプローブは、標準的なJTAG/SWDプローブより高機能ですが、すべての情報を正しく理解するには注意を要する場合があります。膨大な量の不要な命令を収集してしまうのを避けて、トレースによるデバッグを容易にするために、IAR Embedded Workbenchではトレース開始/停止ブレークポイントを提供しています。

申し訳ございませんが、弊社サイトではInternet Explorerをサポートしていません。サイトをより快適にご利用いただくために、Chrome、Edge、Firefoxなどの最新ブラウザをお使いいただきますようお願いいたします。