2013-02-28 3 views
1

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

Это очень необычная проблема. Но да, не развертывание вашей собственной копии dbghelp.dll очень необычно, поскольку XP не имеет этого. –

+0

Открывается ли файл dmp с помощью windbg? – selbie

+0

@selbie Нет, это не ошибка с «неопределенной ошибкой». Это хороший момент, Ханс, я посмотрю, разрешит ли дистрибутив dbghelp проблему. – user1520427

ответ

0

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

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