2013-02-28 4 views
1

내 프로그램이 충돌하면 처리되지 않은 예외 처리기에서 미니 덤프가 만들어집니다. 내가 겪고있는 문제는 사람들이 나에게 크래시 덤프를 보내고 있지만 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; 
    } 
+0

매우 특이한 문제입니다. 하지만 네, dbghelp.dll의 복사본을 배포하지 않는 것은 XP가 없기 때문에 매우 드문 일입니다. –

+0

dmp 파일이 windbg로 열리나요? – selbie

+0

@selbie 아니, "지정되지 않은 오류"로 실패하지 않습니다. Hans, dbghelp를 배포하면 문제가 해결됩니다. – user1520427

답변

0

입니다. 프로세스에 디버거가 연결되어 있으면 생성되는 미니 덤프가 종종 똑같은 방식으로 손상된다는 것을 알게되었습니다. 크기가 정상적으로 생성 된 것보다 작습니다.

처리기에서 EXCEPTION_EXECUTE_HANDLER을 반환하므로 DrWatson이 처리되고 디버거로 프로세스에 연결될 수있는 기본 처리되지 않은 예외 처리기가 실행됩니다.

관련 문제