クラッシュダンプのレジスタを表示します
-
21-08-2019 - |
質問
クラッシュダンプ内の各スタックフレームのレジスタの内容を表示する方法はありますか? レジスタウィンドウは、例外が発生したときのレジスタが含まれているように見えるが、各スタックフレームにその内容を見ることができることは有用であろう。
解決
呼び出し規約によっては、スタック上に保存されているレジスタの一部を取得することができます。たとえば、 CDECL呼び出し規約の中、全てのレジスタEAX、ECXを除きます、およびEDXは、発信者または呼び出し先のいずれかによって、保存される必要があります。あなたは、一般的にコールスタックの上位アップから値を取得することができなくなりますので、これらの3つのレジスタは、clobberableです。関数が保存されなければならないレジスタを使用しない場合は、それはそれを保存しませんが、それはそれを使用しないため、そのレジスタは、次の上位のスタックフレームで同じ値を持っています。
他のヒント
ビットをいくつかの研究を行うと、このことを考えた後、私はそれはおそらく不可能であることに気づきました。プロセスメモリの特定の領域を節約できますミニダンプクラッシュは、クラッシュがデバッガで起こった環境を再作成するために、十分な状態情報(MiniDumpWriteDump()関数に渡されるフラグに依存します)。これは、各命令でプロセッサ状態を持っていないか、または例外が発生した場合でも、各スタックフレームで、それが唯一のプロセッサ状態を知っています。
、それはしかし、あなたが与えられたスタックフレームのための情報を試してみて、お見せするためにデバッガを求めることができ、スタックダウンいくつかの情報が放り込まれることは事実です。まず、フレーム番号のスタックを参照してください「kn
」または「.frame /c [frame]
」をしようとする「.frame /r [frame]
」を行います。
詳細については、ヘルプ( ".hh
")をチェックします。
私は、デバッグ時にあなたはどちらかそれを得ることができるとは思いません。あなたはレジスタから得ることができる唯一の値は、現在の命令でその値である。