0

私のコードは「純粋な関数呼び出し」エラーになることがあるので、_set_purecall_handler を使用してハンドラーを登録します。デバッグ モードでは StackWalker を使用して完全なコールスタックを取得できますが、リリース モードでは StackWalker は有用な情報をほとんど表示しません。MiniDumpWriteDump を使用して、ExceptionPointers = NULL を設定しようとしています。クラッシュした後、ダンプ ファイルを取得しましたが、それをデバッグして表示できません: 指定されたテンプレートが見つかりません。フルパスが正しいことを確認してください。
このような状況で、リリースされたアプリケーションから情報を取得する方法はありますか?

4

1 に答える 1

0

通常、サブクラスの vtable と抽象クラスの vtable を照合することで、呼び出されるメソッドを推測できます。抽象クラスの vtable には、実装のない仮想関数用の pure_call ハンドラが多数含まれています。

メソッド呼び出しに関して知っておくべきことはすべて、スタックとレジスターにあります。呼び出しサイトの逆アセンブリを見て、vtable から関数を取得するために使用されたオフセットに注意し、死亡したオブジェクトの実際の vtable をダンプしてください。 `vftable's を探してコンストラクターのコードを逆アセンブルすることにより、それを作成します。次に、 ddsを使用した簡単な検査により、どのメソッドが呼び出されたかを知るために必要なすべての情報が得られるはずです(ただし、オブジェクトがなくなった理由はわかりません:o)

于 2013-01-25T14:51:28.860 に答える