4.5 ブレークポイントとウォッチポイントの使用

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

ブレークポイント

ブレークポイントを使用すると、実行が特定のアドレスに達したときにアプリケーションを中断できます。ブレークポイントは、常に特定のメモリアドレスと関連しています。そのメモリアドレスに何が格納されているかは問いません。実行がブレークポイントに達すると、通常の実行は、そのブレークポイントに格納されている命令が実行される前に停止します。
以下を設定できます。
  • 指定したアドレスで特定の命令が実行されたときにトリガされるソフトウェアブレークポイント。
  • 特定のメモリアドレスからフェッチされる命令をプロセッサが実行しようとしたときにトリガされるハードウェアブレークポイント。
  • 式の評価結果が true の場合、または無視する回数に達したときにトリガされる条件ブレークポイント。
  • ヒットされた後で削除される一時的なソフトウェアブレークポイントまたはハードウェアブレークポイント。

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

ウォッチポイント

ウォッチポイントはブレークポイントと似ていますが、特定のアドレスから実行されている命令ではなく、監視するデータアクセスのアドレスまたは値であるという点が異なります。どの場所に格納されている内容をテストするかは、レジスタまたはメモリアドレスで指定します。ウォッチポイントは、データ依存であることを示す、データブレークポイントという名前で呼ばれることもあります。監視対象のアドレスがアプリケーションによってアクセスされると、アプリケーションの実行は停止します。
以下を設定できます。
  • 特定のメモリ位置を特定の方法でアクセスしたときにトリガされるウォッチポイント。
  • 式の評価結果が true の場合、または無視する回数に達したときにトリガされる条件付きウォッチポイント。

  • ターゲットによっては、変数にアクセスした命令の後の追加的な命令も実行される可能性があります。
  • ウォッチポイントは、スカラ値でのみサポートされます
  • 同時に設定できるウォッチポイントの数は、使用するターゲットとデバッグ接続によって決まります。ターゲットによっては、ウォッチポイントがサポートされていないこともあります。

ブレークポイントとウォッチポイントを設定する際の注意事項

ブレークポイントとウォッチポイントを設定するときは、以下の点に注意してください。
  • 使用可能なハードウェアブレークポイントの数はターゲットによって異なります。
  • 高レベルの最適化を行ってイメージをコンパイルしている場合、または C++ テンプレートがイメージに含まれている場合、ソースコード内にブレークポイントを設定することによる効果は、ブレークポイントをどこに設定するかによって決まります。例えば、インライン関数または C++ テンプレートにブレークポイントを設定すると、その関数またはテンプレートのインスタンスごとにブレークポイントが 1 つ作成されます。そのため、ターゲットのブレークポイントリソースが不足する可能性があります。
  • メモリ管理ユニット (MMU)を有効にすると、メモリ領域が読み出し専用に設定される場合があります。そのメモリ領域にソフトウェアブレークポイントが含まれている場合、このソフトウェアブレークポイントを削除することはできません。したがって、MMU を有効にする前に、ソフトウェアブレークポイントをクリアしておくことが重要です。
  • ウォッチポイントは、常に有効範囲にあるため、グローバル/静的データシンボルでしかサポートされていません。関数からステップアウトするときはローカル変数を使用できません。
  • ターゲットによっては、ウォッチポイントがサポートされていないこともあります。現在、ウォッチポイントコマンドは、デバッグハードウェアアダプタを使用するハードウェアターゲットでのみ使用できます。
  • ウォッチポイントをトリガする命令のアドレスが、PC のレジスタに表示されるアドレスと異なる可能性があります。これはプロセッサのパイプライン効果が原因です。
  • 共有オブジェクトを使用するアプリケーションをデバッグする場合、共有オブジェクト内に設定されているブレークポイントは、その共有オブジェクトがアンロードされると再評価されます。これらのブレークポイントとウォッチポイントのうち、解決可能なアドレスを持つものは設定され、それ以外は保留中のままとなります。
  • ブレークポイントが関数名によって設定されている場合は、既にオンデマンドロードされているインラインインスタンスのみが見つかります。
以下のサブセクションから構成されています。
関連する参考文書
4.5.1 実行ブレークポイントの設定または削除
4.5.3 データウォッチポイントのプロパティの表示
4.8 トレースポイントの設定
4.9 Streamline の始点と終点の設定
4.6 条件ブレークポイントの使用
4.6.1 既存のブレークポイントへの条件の割り当て
4.7 ブレークポイントとウォッチポイントの保留について
4.5.5 ファイルへの DS-5 ブレークポイント設定のエクスポート
4.5.4 ファイルからの DS-5 ブレークポイント設定のインポート
10.3 ARM アセンブラエディタ
10.4 [Breakpoints]ビュー
10.5 C/C++ エディタ
10.6 [Commands]ビュー
10.8 [Disassembly]ビュー
10.11 [Expressions]ビュー
10.14 [Memory]ビュー
10.17 [Registers]ビュー
10.26 [Variables]ビュー
関連情報
DS-5 デバッガコマンド
非機密扱いPDF file icon PDF 版ARM DUI0446VJ
Copyright © 2010-2015 ARM.All rights reserved.