3.1 概要: ブレークポイントとウォッチポイント

ブレークポイントとウォッチポイントを使用すると、特定のイベントが発生したときと特定の条件が満たされたときにターゲットを停止できます。実行が停止したら、メモリ、レジスタ、または変数の内容を検証することも、実行を再開する前に行う他の操作を指定することもできます。

ブレークポイント

ブレークポイントを使用すると、実行が特定のアドレスに達したときにアプリケーションを中断できます。実行がブレークポイントに達すると、通常の実行は、そのブレークポイントに格納されている命令が実行される前に停止します。
ブレークポイントのタイプ:
  • ソフトウェアブレークポイントを使用すると、実行が特定のアドレスに達したときにプログラムを中断できます。
    ソフトウェアブレークポイントは、デバッガによって実装され、ブレークポイントアドレスにある命令を特殊な命令で置き換えます。ソフトウェアブレークポイントは、RAM のみで設定できます。
  • ハードウェアブレークポイントは、特殊プロセッサハードウェアを使用してアプリケーションの実行を中断します。ハードウェアブレークポイントは、制限されたリソースです。
ブレークポイントのプロパティを設定して以下を実行できます。
  • [条件付き](Conditional)
    式の評価結果が true の場合、または無視する回数に達したときにトリガされる条件ブレークポイント。詳細については、条件ブレークポイントを参照して下さい。
  • [Temporary]
    テンポラリブレークポイントは、一度のみしか達することができず、その後自動的に削除されます。
  • スクリプト化
    スクリプトファイルは、特定のブレークポイントに割り当てられます。ブレークポイントがトリガされると、割り当てられているスクリプトが実行されます。

  • メモリ領域とそれに関連したアクセス属性。
  • ターゲットプロセッサによって提供されるハードウェアサポート。
  • ターゲット接続の管理に使用されるデバッグインタフェース。
  • 実行状態(OS 認識アプリケーションをデバッグしている場合)。
ターゲットビューは、ターゲットのブレークポイント機能を表示します。

ブレークポイントを設定する際の注意事項

ブレークポイントを設定するときは、以下の点に注意して下さい。
  • 使用可能なハードウェアブレークポイントの数はプロセッサによって異なります。また、ハードウェアブレークポイントとウォッチポイントは同じプロセッサハードウェアを使用するため、依存関係にあります。
  • 高レベルの最適化を行ってイメージをコンパイルしている場合、または C++ テンプレートがイメージに含まれている可能性がある場合、ソースコード内にブレークポイントを設定することによる効果は、ブレークポイントをどこに設定するかによって決まります。例えば、インライン関数または C++ テンプレートにブレークポイントを設定すると、その関数またはテンプレートのインスタンスごとにブレークポイントが 1 つ作成されます。そのため、ターゲットのブレークポイントリソースが不足する可能性があります。
  • メモリ管理ユニット (MMU) をイネーブルすると、メモリ領域が読み出し専用に設定される場合があります。そのメモリ領域にソフトウェアブレークポイントが含まれている場合、このソフトウェアブレークポイントを削除することはできません。そのため、MMU をイネーブルする前に、ソフトウェアブレークポイントをクリアしておくことが重要です。
  • 共有オブジェクトを使用するアプリケーションをデバッグする場合、共有オブジェクト内に設定されているブレークポイントは、その共有オブジェクトがアンロードされると再評価されます。これらのブレークポイントとウォッチポイントのうち、解決可能なアドレスを持つものは設定され、それ以外は保留中のままとなります。
  • ブレークポイントが関数名によって設定されている場合は、既にオンデマンドロードされているインラインインスタンスのみが見つかります。

ウォッチポイント

ウォッチポイントはブレークポイントと似ていますが、実行されている命令ではなく、監視するデータアクセスのアドレスまたは値であるという点が異なります。監視するグローバル変数またはメモリアドレスを指定します。ウォッチポイントは、データ依存であることを示す、データブレークポイントという名前で呼ばれることもあります。監視対象のアドレスがアプリケーションによってアクセスされると、アプリケーションの実行は停止します。読み出し、書き込み、または読み出し/書き込みウォッチポイントを設定できます。

ウォッチポイントを設定する際の注意事項

ウォッチポイントを設定するときは、以下の点に注意して下さい。
  • ターゲットによっては、変数にアクセスした命令の後の追加的な命令も実行される可能性があります。これはプロセッサのパイプライン効果が原因です。これは、プログラムが停止するアドレスは、ウォッチポイントのトリガの原因となる命令に正確に一致しない場合があるということです。
  • ウォッチポイントは、スカラ値でのみサポートされます
  • ウォッチポイントは、常に有効範囲および同じアドレスにあるため、グローバルまたは静的データシンボルでしかサポートされていません。特定の関数からステップアウトするときはローカル変数を使用できません。
  • 同時に設定できるウォッチポイントの数は、使用するターゲットとデバッグ接続によって決まります。
  • ターゲットによっては、ウォッチポイントがサポートされていないこともあります。
関連する作業
3.3 ブレークポイントの使用
3.4 ウォッチポイントの使用
関連する参考文書
3.8 条件ブレークポイント
3.10 ブレークポイントとウォッチポイントの保留
非機密扱いPDF file icon PDF 版ARM DUI0446WJ
Copyright © 2010-2015 ARM.All rights reserved.