Когда моя программа выходит из строя, она создает мини-накопитель из обработанного обработчика исключений. Проблема, с которой я сталкиваюсь, заключается в том, что люди отправляют мне дампы сбоев, но когда я пытаюсь их открыть в Visual Studio 2010, они говорят, что они повреждены («Файл дампа имеет недопустимый формат»). Я не распространяю dbghelp.dll
с моей программой, мне нужно? Я предполагаю, что если это проблема с версией, Visual Studio сообщит мне и не выведет вышеприведенное сообщение.Windows corrupt minidump
код используется для создания журналов является
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;
}
Это очень необычная проблема. Но да, не развертывание вашей собственной копии dbghelp.dll очень необычно, поскольку XP не имеет этого. –
Открывается ли файл dmp с помощью windbg? – selbie
@selbie Нет, это не ошибка с «неопределенной ошибкой». Это хороший момент, Ханс, я посмотрю, разрешит ли дистрибутив dbghelp проблему. – user1520427