キャッシュされたデータ メモリとキャッシュされた命令メモリで部分的に動作するプログラムをデバッグしようとしています。問題は、そのようなメモリを調べようとするときのデバッガの動作についてです。特定の場所を調べるときに、キャッシュされたコピーにアクセスしますか? もしそうなら、ミスしたらデータをフェッチしなければならないので、実際にキャッシュを変更しますか? プログラムの動作がデバッガーを使用していない場合とは異なる可能性があるということですか? デバッガーがキャッシュに影響を与えずに、キャッシュ関連の問題をデバッグする方法はありますか?
更新:特定の CPU コアは ARM Cortex-A5 です。デバッガはDSTREAM/DS-5
2 に答える
3
CPUに依存するため、質問は少し一般的だと思います。
ただし、非常にグローバルなルールがいくつかあります。
- デバッガーは、CPU がデータ アクセスで何を認識しているかを確認しようとします。これには、データ キャッシュのキャッシュ ルックアップが含まれます。
- これは命令キャッシュの場合とは異なります。デバッガは通常、データ アクセスを実行するときにルックアップを実行しないためです。しかし、命令キャッシュにはダーティ データが含まれていないため、これは通常は問題になりません。デバッガーによっては、データが書き込まれると、DCache を消去し、対応する ICache 行を無効にすることができます。
- デバッグ アクセスは邪魔にならないようにし、ミスの場合にラインフィルが実行されないモードを強制することができます。しかし、これは実際には CPU に依存しており、グローバル ルールではありません。
于 2016-04-22T19:57:23.007 に答える
2
DS-5は、CPU に接続された JTAG プローブを使用します。CPU のアドレス可能なメモリを読み取るには、メモリを取得するマイクロ操作を通じて CPU を実行する必要があります。これは、CPU が単にプログラムを実行する場合とは異なる方法でキャッシュを混乱させます。
重要な (疑わしい) コードが終わるまで CPU を停止せず、レジスタとメモリの内容から何が起こったに違いないかをつなぎ合わせることで、影響を最小限に抑えることができます。プログラムを最初からブレークポイントまで実行できる場合、特にそれが 10,000 以上の命令である場合、キャッシュはおそらく正しい状態になります。非同期アクティビティがない限り。
問題がキャッシュによるものかどうかを特定するには、単純にキャッシュを無効にできますか?
于 2016-04-22T20:27:37.633 に答える