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 войдет в игру и присоединится к вашему процессу как отладчик.