내 프로그램이 충돌하면 처리되지 않은 예외 처리기에서 미니 덤프가 만들어집니다. 내가 겪고있는 문제는 사람들이 나에게 크래시 덤프를 보내고 있지만 Visual Studio 2010에서 열려고하면 파일이 손상되었다는 것입니다 ("덤프 파일의 형식이 잘못되었습니다"). 내 프로그램에 dbghelp.dll
을 배포하지 않을 예정입니까? 버전 문제 일 경우 Visual Studio에서 알려주고 위의 메시지가 출력되지 않는다고 가정합니다.Windows 손상된 미니 덤프
나는 로그를 생성하는 데 사용하는 코드는이 프로세스를 디버깅하는 사람에 의해 발생할 수 있습니다
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 아니, "지정되지 않은 오류"로 실패하지 않습니다. Hans, dbghelp를 배포하면 문제가 해결됩니다. – user1520427