トレースサポートについて

ARM® DS-5™ を使用すると、アプリケーションまたはシステムでトレースを実行できます。 トレースは、命令の以前の非侵襲型デバッグをリアルタイムにキプチャする機能です。 これは、システムがフルスピードで実行されている間に問題を調査できる強力なツールです。 これらの問題は断続的であ可能性があり、プロセッサの開始と停止を要する従来のデバッグ手法では特定が困難です。 トレースは、潜在的なボトルネックを特定する場合、アプリケーションのパフォーマンス重視の部分を向上させる場合でも役立ちます。

デバッガでアプリケーションでの関数の実行をトレースする前に、以下のことを確認する必要があります。

Show/hideトレースハードウェア

トレースは通常、プロセッサに接続されている外部ハードウェアブロックによって提供されます。 これは、Embedded Trace MacrocellETM™)または Program Trace Macrocell(PTM)と呼ばれ、ARM アーキテクチャベースシステムのオプションの部分です。 System-on-chip Designer は、このブロックをシリコンから省いてコスト削減することがあります。 これらのブロックは、プロセッサの動作を監視するので(ただし動作には影響は与えない)、命令の実行とデータアセスを監視できます。

トレースのキャプチャには 2 つの重要な問題があります。 1 つ目は、プロセッサクロック速度が非常に高く、ほんの数秒の操作でも数十億サイクが実行されることです。 この情報量を参照することは明らかに困難です。 2 つ目の関連する問題は、最新のプロセッサでは、サイクルあたり 1 または複数の 64 ビットのキャッシュアクセスが実行される可能性があることと、データアドレスとデータ値の両方を記録する場合に大きな帯域が必要になる可能性があることです。 その問題が現れることはよくあるので、数本のピンがチップ上に用意されており、プロセッサをクロッキグ可能なレートより大幅に低いレートでこれらの出力を切り替えることができることがあります。 トレースポートの容量は簡単に超えてしまいます。 この後半の問題を解決するには、トレースマクロセルで情報を圧縮し、必要な帯域幅を減らします。 ただし、これらの問題に対処する主な方法は、選択したトレース情報のみを収集するようトレースブロックを制御する方法です。 例えば、データ値を記録しないで実行のみをトレースしたり、特定のペリフェラルに対して、または特定の関数の実行時に、データアクセスのみをトレースしたりできます。

さらに、トレース情報をオンチップメモリバッファである Embedded Trace BufferETB™)に格納することは一般的です。 これは、情報を高速かつオフチップで取得する問題を軽減しますが、シリコンの面積の点で追加のコストがかかり、さらにキャプチャできるトレースの量が制限されます。

ETB は圧縮したトレース情報を循環形式で保存し、停止するまで継続してトレース情報をキャプチャします。 ETB のサイズはチップの実装によってなりますが、通常は、数千行のプログラムトレースの保持には 8KB または 16KB のバッファで十分です。

プログラムが失敗した場合、トレースバッファが有効であると、プログラム履歴の一部を表示できます。 このプログラム履歴を表示することで、プログラムを逆戻りして、障害発生時点の前に何が発生したかを簡単に確認できます。 これは、プロセッサの開始と停止を要する従来のデバッグ手法では特定が困難である断続的な障害やリアルタイムな障害の調査に特に役立ちます。 トレースは実行されたものを正確に示すため、ハードウェアトレースを使用するとこれらの障害の特定に要する時間が大幅に短縮されます。

Show/hideトレース範囲

トレース範囲により、メモリのリニア範囲にトレースのキャプチャを制限できます。 トレース範囲には、仮想メモリに開始アドレスと終了アドレスがあり、このアドレス範囲内の実行がキャプチャされます。 トレースの始点と終点とは異なり、トレース範囲内で行われた関数呼び出しは、関数呼び出しのターゲットも指定したアドレス範囲内にある場合にのみ、キャプチャされます。 有効にできるトレース範囲の数は、プロセッサのデバッグハードウェアによって決まります。

トレース範囲が設定されていない場合は、トレースキャプチャはデフォルトで有効になっています。 トレース範囲が設定されている場合、トレースキャプチャはデフォルトで無効になっており、定義された範囲内でのみ有効になります。

トレースビューの[範囲]タブを使用してトレース範囲を設定できます。 各範囲の開始アドレスと終了アドレスには、絶対アドレスまたは式(関数の名前など)のいずれかを指定できます。 コンパイラを最適化すると、メモリ内のコードが、関連するソースコードから再配置または最小化されることに注意してください。 これによって、コードが予期していないようにインクルードされたり、トレースキャプチャから除外されたりすることがあります。

Show/hideトレースポイント

トレースポイントでは、プログラムでトレースがキャプチャされる位置を厳密に制御できます。 トレースポイントは、非侵入型であり、システムで処理を停止させる必要がありません。 設定できるトレースポイントの最大数は、プロセッサのデバッグハードウェアによって決まります。 以の種類のトレースポイントが使用できます。

トレースの起点

実行が選択したアドレスに達したときにトレースキャプチャを有効にします。

トレースの終点

実行が選択したアドレスに達したときにトレースキャプチャを無効にします。

トレースのトリガポイント

トレースビューで簡単に検索できるように、トレースでこのポイントをマークします。

ソースビューにトレースポイントを設定するには、余白を右クリックし、[DS-5 ブレークポイント]コンテキストメニューから選択します。 逆アセンブリビューにトレースポイントを設定するには、命令を右クリックし、コンテキストメニューから選択します。 トレースポイントはブレークポイントビューに一覧表示されます。

トレースの始点はトレースのキャプチャを有効にし、トレースの終点はトレースのキャプチャを無効にします。 トレースポイントはネストを考慮しません。 たとえば、行で 2 つのトレースの起点に達した後に、2 つのトレースの終点に達した場合、最初のトレースの終点(2 番目ではない)達するとすぐにトレースは無効になります。 トレースの起点が設定されていない場合、トレースはデフォルトで常に有効になります。 トレース起点が設定されている場合、トレースはデフォルトで無効になり、最初のトレースの起点に達したときにだけ有効になります。

トレースのトリガポイントを使用すると、トレースの関心のある位置をマークできるため、後でトレースビューで簡単に検索できます。 ビューメニューの[トリガパケットの検出]オプションを選択してトレースのトリガポイントを特定します。 トレースのトリガポイントに達したときにデバッガが停止するように設定するには、トレースビューの[プロパティ]タブの[トリガ時に停止]チェックボックスを使用します。 これを設定すると、[ポストトリガキャプチャのサイズ]フィールドを使用してトレースのトリガポイントの前後でキャプチャされるトレースの量を設定できます。

Note

ターゲットプラットフォームによっては、トレースキャプチャデバイス(ETB/DSTREAM)によるトレーストリガポイントの検出をサポートしていないのもあります。

Show/hide関連項目

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