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;
}
這是一個非常不尋常的問題。但是,沒有部署自己的dbghelp.dll副本是非常罕見的,因爲XP沒有。 – 2013-02-28 03:01:08
dmp文件是否用windbg打開? – selbie 2013-03-01 07:48:24
@selbie不,它不會以「未指定的錯誤」失敗。這是漢斯的一個好點,我會看看分發dbghelp是否解決了這個問題。 – user1520427 2013-03-01 09:44:18