3

http://www.codeproject.com/Articles/1934/Post-Mortem-Debugging-Your-Application-with-Miniduを使用して、別のシステムで常にクラッシュするアプリケーションからダンプ ファイルを取得しています。

私が持っているのは、そのヘッダー ファイルと CPP であり、デバッグ モードでは、デバッガーが接続されていないため、dmp ファイルを作成するかどうかを尋ねられ、クラッシュしますが、リリース モードではクラッシュするだけです。

基本的に私が使用しているコードは

void IndexFault(int n)
{
    unsigned char* smallArray = new unsigned char[4];
    printf((const char*)smallArray[n]);
}

MiniDumper* mDump = new MiniDumper("Dumpfile");

int main()
{
    IndexFault(4);
    return 0;
}

繰り返しますが、デバッグ モードで作成した exe を実行すると、ファイルは正常に取得されますが、リリースでは何も取得されません。どちらの場合も、これは 64 ビット コードです。これが機能したら、これを実際のコードに適用しますが、今のところ、何が起こっているのかわかりません。私が使用するMinidumpwriterは、上記のWebサイトからのものです。

4

1 に答える 1

0

このステップを逃したと思います:

API を呼び出すには、未処理の例外ハンドラーを API で設定して、クラッシュをキャッチする必要がありSetUnhandledExceptionFilterます。これにより、アプリケーションで未処理の例外が発生したときに、ほぼいつでもフィルター関数を呼び出すことができます。二重スタック フォールトなどの特定の未処理の例外では、オペレーティング システムはフィルターや JIT デバッガーを呼び出さずにアプリケーションを直ちに終了します

とにかく、個人的にはそのような場合に WinDbg を使用することを好みます。それを使ってリモート プロセスに接続し、そのダンプを取得するだけです。

于 2012-12-30T04:23:36.167 に答える