ブレークポイントとウォッチポイントについて

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

デバッガには以下のタイプが用意されています。

ブレークポイント

ブレークポイントを使用すると、実行が特定のアドレスに達したときにアプリケーションを中断できます。 ブレークポイントは、常に特定のメモリアドレスと関連しています。そのメモリアドレスに何が格納されているかは問いません。 実行がブレークポイントに達すると、通常の実行は、そのブレークポイントに格納されている命令が実行される前に停止します。

以下を設定できます。

  • 指定したアドレスで特定の命令が実行されたときにトリガされるソフトウェアブレークポイント

  • 特定のメモリアドレスからフェッチされる命令をプロセッサが実行しようとしたときにトリガされるハードウェアブレークポイント

  • 式の評価結果が true の場合、または無視する回数に達したときにトリガされる条件ブレークポイント

  • ヒットされた後で削除される一時的なソフトウェアブレークポイントまたはハードウェアブレークポイント

設定できるブレークポイントのタイプは、以下の要因によって決まります。

  • メモリ領域とそれに関連したアクセス属性

  • ターゲットプロセッサによって提供されるハードウェアサポート

  • ターゲット接続の管理に使用されるデバッグインタフェース

  • 実行状態(OS 認識アプリケーションをデバッグしている場合)

ウォッチポイント

ウォッチポイントはブレークポイントと似ていますが、特定のアドレスから実行されている命令ではなく、監視するデータアクセスのアドレスまは値であるという点が異なります。 どの場所に格納されている内容をテストするかは、レジスタまたはメモリアドレスで指定します。 ウォッチポイントは、データ依存であることを示す、データブレークポイントという名前で呼ばれることもあります。 監視対象のアドレスがアプリケーションによってアクセスされると、アプリケーションの実行は停止します。

以下を設定できます。

  • 特定のメモリ位置を特定の方法でアクセスしたときにトリガされるウォッチポイント

  • 式の評価結果が true の場合、または無視する回数に達したときにトリガされる条件付きウォッチポイント

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

ブレークポイントとウォッチポイントを設定するときは、以下の点に注意してください。

  • 使用可能なハードウェアブレークポイントの数はターゲットによって異なります。

  • 高レベルの最適化を行ってイメージをコンパイルしている場合、または C++ テンプレートがイメージに含まれている場合、ソースコード内にブレークポイントを設定することによる効果は、ブレークポイントをどこに設定するかによって決まります。 例えば、インライン関数または C++ テンプレートにブレークポイントを設定すると、その関数またはテンプレートのインスタンスごとにブレークポイントが 1 つ作成されます。 そのため、ターゲットのブレークポイントリソースが不足する可能性があります。

  • メモリ管理ユニット(MMU)をイネーブルすると、メモリ領域が読み出し専用に設定される場合があります。 そのメモリ領域にソフトウェアブレークポイントが含まれている場合、このソフトウェアブレークポイントを削除することはできません。 そのため、MMU をイネーブルする前に、ソフトウェアブレークポイントをクリアしておくことが重要です。

  • ウォッチポイントは、常に有効範囲にあるため、グローバル/静的データシンボルでしかサポートされていません。 関数からステップアウトするときはローカル変数を使用できません。

  • ターゲットによっては、ウォッチポイントがサポートされていないこともあります。 現在、ウォッチポイントコマンドは、デバッグハードウェアエージェントを使用するハードウェアターゲットでのみ使用できます。

  • ウォッチポイントをトリガする命令のアドレスが、PC のレジスタに表示されるアドレスと異なる可能性があります。 これはプロセッサのパイプライン効果が原因です。

  • 共有オブジェクトを使用するアプリケーションをデバッグする場合、共有オブジェクト内に設定されているブレークポイントは、その共有オブジクトがアンロードされると再評価されます。 これらのブレークポイントとウォッチポイントのうち、解決可能なアドレスを持つものは設定されそれ以外は保留中のままとなります。

  • ブレークポイントが関数名によって設定されている場合は、既にオンデマンドロードされているインラインインスタンスのみが見つかります。 関数のすべてのインラインインスタンスを見つけるには、オンデマンドロードをディセーブルする必要があります。

Show/hide関連項目

Copyright © 2010-2012 ARM. All rights reserved.ARM DUI 0446IJ
Non-ConfidentialID051512