1

プログラムがクラッシュすると、未処理の例外ハンドラーからミニダンプが作成されます。私が抱えている問題は、人々が私にクラッシュ ダンプを送ってきたことですが、Visual Studio 2010 でそれらを開こうとすると、破損していると表示されます (「ダンプ ファイルの形式が無効です」)。dbghelp.dllプログラムと一緒に配布していませんが、配布する必要がありますか? それがバージョンの問題である場合、Visual Studio は私に通知し、上記のメッセージを出力しないと思います。

ログを生成するために使用するコードは

LONG WINAPI OnUnhandledException(PEXCEPTION_POINTERS pExceptionInfo)
    {
        MINIDUMP_EXCEPTION_INFORMATION ei;
        ei.ExceptionPointers = pExceptionInfo;
        ei.ThreadId = GetCurrentThreadId();
        ei.ClientPointers = FALSE;

        DWORD dwProcessId = GetCurrentProcessId();
        SYSTEMTIME stLocalTime;
        GetLocalTime(&stLocalTime);
        wchar_t CrashDumpW[1024];
        swprintf_s(CrashDumpW, NELEMS(CrashDumpW), 
                L"%s\\%s-%s-%04X-%04d%02d%02d-%02d%02d%02d-%ld-%ld.dmp", 
                g_CrashDirectory.c_str(), L"Program", MAJOR_VERSION_STR, 
                INTERNAL_VERSION, stLocalTime.wYear, stLocalTime.wMonth,
                stLocalTime.wDay, stLocalTime.wHour, stLocalTime.wMinute, 
                stLocalTime.wSecond, dwProcessId, ei.ThreadId);

        HANDLE hFile = CreateFileW(CrashDumpW, GENERIC_READ | GENERIC_WRITE,
            NULL, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        MiniDumpWriteDump(GetCurrentProcess(), dwProcessId, hFile, 
            MiniDumpScanMemory, &ei, NULL, NULL);
        CloseHandle(hFile);

        return EXCEPTION_EXECUTE_HANDLER;
    }
4

1 に答える 1

1

これは、誰かがプロセスをデバッグしていることが原因である可能性があります。プロセスにデバッガーが接続されている場合、プロセスが生成するミニダンプがまったく同じように破損することがよくあります。通常生産されるものよりサイズが小さい。

ハンドラーから戻るためEXCEPTION_EXECUTE_HANDLER、デフォルトのハンドルされていない例外ハンドラーがあなたのハンドラーの後に実行されます。これにより、DrWatson が機能し、デバッガーとしてプロセスにアタッチされる可能性があります。

于 2013-08-21T19:23:51.137 に答える