スナップショットビューアについて

スナップショットビューアを使用すると、インタラクティブデバッグが使用できないシナリオにおけるアプリケーション状態のスナップショット解析できます。 スナップショットビューアを使用したアプリケーションのデバッグを有効にするには、以下のデータが必要です。

このすべてのデータを用意できないと、使用可能なデバッグのレベルが低下します。 このデータのキャプチャはアプリケーション固有であり、このためのツールは用意されていません。 例外ハンドラまたは信号ハンドラをインストールして、アプリケーションのエラー状況を見つけ、必要なデータをダンプする必要がある場合があります。

また、ダンプしたデータをデバイスからデバッガがアクセス可能なワークステーション上に取得する方法についても考慮する必要があります。 この方法についてのいくつかの提案を以下に示します。

Show/hideレジスタ値

レジスタ値は、ある時間の特定ポイントでのシステムの状態をエミュレートするために使用されます。 最も重要なレジスタは現在のプロセッサモードのレジスタです。 例えば、ARMv4 アーキテクチャプロセッサでは、これらのレジスタは R0-R15 と以下のプログラムステータスレジスタ(PSR)です。

  • カレントプログラムステータスレジスタ(CPSR)

  • アプリケーションプログラムステータスレジスタ(APSR)

  • セーブドプログラムステータスレジスタ(SPSR)

多くの ARM® プロセッサでは、例外(データアボート)が発生すると、別のプロセッサモードに切り替わることに注意して下さい。 この場合、使用するレジスタ値は、例外ハンドラ内のレジスタ値ではなく、例外を起こした正しいモードを反映することを確認する必要があります。

また、アプリケーションで浮動小数点データが使用されており、デバイスにベクタ浮動小数点ハードウェアがある場合は、スナップショットビュアにベクタ浮動小数点レジスタの内容を指定する必要があります。 キャプチャする重要なレジスタを以下に示します。

  • 浮動小数点ステータスおよび制御レジスタ(FPSCR)

  • 浮動小数点例外レジスタ(FPEXC)

  • 単精度レジスタ(Sn

  • 倍精度レジスタ(Dn

  • 4 倍精度レジスタ(Qn

Show/hideメモリ値

大半のアプリケーション状態は通常、グローバル変数、ヒープ、およびスタックの形式でメモリに格納されます。 サイズの制約のために、スナップショットビューアにメモリ内容全体をコピーするのが難しいことがあります。 このような場合、特に重要なメモリ領域を慎重に検討する必要があります。

クラッシュをデバッグする場合に、クラッシュの要因を見つけ出すのに有用な情報はコールスタックであることが多いです。コールスタックは、応するすべての関数パラメータの値や例外以前の各関数の呼び出しシーケンスを示すためです。 コールスタックを表示するには、デバッガが現のスタックポインタを認識しており、スタックを含むメモリの内容にアクセスできる必要があります。 デフォルトでは、ARM プロセッサではスタックが下方に展開されるので、現在のスタックポインタから開始し、スタックの開始位置に達するまでメモリ内を上方に向かって展開するメモリ用意する必要があります。 スタックの内容全体を指定できない場合でも、最近の関数呼び出しが分かるため、現在のスタックポインタから始ま一部分でも有効です。

アプリケーションでグローバル(extern またはファイル static)データを使用している場合は、対応するメモリ値を指定するとデバッガ内の変数を表示できます。

ヒープデータを指すローカルまたはグローバル変数がある場合は、デバッガの関連ポインタに従ってデータを検証することが必要になる場合があります。 これを行うには、スナップショットビューアにヒープの内容を指定しておく必要があります。 ヒープはメモリの広い範囲を占有してしまうことがあり、ヒープ全体をキャプチャできないことがあるので注意して下さい。 メモリ内のヒープのレイアウトとヒープ割り当てを制御するデータ構造は、アプリケーションまたは C ライブラリ固有である場合があるので、詳細については、関連のマニュアルを参照して下さい。

逆アセンブリレベルでデバッグするには、アプリケーションコードが配置されているメモリ値にデバッガからアクセスできる必要があります。 通常はコードを含むメモリの内容をキャプチャする必要はありません。これは、多くの場合、fromelf などの処理ツールを使用して同じデータをイメージから直接抽出できるからです。 ただし、以下のような複雑な状況に注意して下さい。)

  • イメージおよびメモリ内の値が変わる可能性がある自己変更型コード

  • 実行時のイメージ内でのメモリアドレスのダイナミックな再配置

Show/hideデバッグシンボル

デバッガには、以下のようなアプリケーションに関する高レベルの情報を表示するために、デバッグ情報が必要です。

  • ソースコード

  • 変数の値と型

  • 構造体

  • コールスタック

この情報はコンパイラおよびリンカによってアプリケーションイメージ内に格納されるので、デバイス上で実行されている同じイメージのローカデバッグコピーがあることを確認する必要があります。 イメージに格納されるデバッグ情報の量、そしてデバッグセッションの結果として生じ品質は、コンパイラおよびリンカに渡されるデバッグおよび最適化の設定による影響を受ける可能性があります。

組み込みデバイスでイメージを実行するときは通常、できる限り多くのデバッグ情報を取り除きます。 このような場合、デバッグ時はデバッグ情報を取り除く前のイメージを使用して下さい。

Show/hide関連項目

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