Windows испорченный минидамп

Когда моя программа падает, она создает мини-дамп из обработчика необработанных исключений. У меня проблема в том, что люди посылают мне аварийные дампы, но когда я пытаюсь открыть их в 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;
    }

1 ответ

Это может быть вызвано тем, что кто-то отлаживает ваш процесс. Я заметил, что если к процессу подключен отладчик, мини-дампы, которые он создает, часто повреждаются точно так же. Они меньше по размеру, чем те, которые обычно производятся.

Так как вы вернетесь EXCEPTION_EXECUTE_HANDLER из вашего обработчика, обработчик по умолчанию необработанного исключения выполняется после вашего, что может привести к тому, что DrWatson войдет в игру и присоединится к вашему процессу как отладчик.

Другие вопросы по тегам