【发布时间】:2013-02-28 01:58:31
【问题描述】:
当我的程序崩溃时,它会从未处理的异常处理程序中创建一个小型转储。我遇到的问题是人们向我发送故障转储,但是当我尝试在 Visual Studio 2010 中打开它们时,它说它们已损坏(“转储文件的格式无效”)。我没有在我的程序中分发dbghelp.dll,我需要吗?我假设如果是版本问题,Visual Studio 会通知我而不输出上述消息。
我用来生成日志的代码是
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 不,它不会因“未指定的错误”而失败。汉斯说得很好,我会看看分发 dbghelp 是否能解决问题。
标签: winapi minidump dbghelp minidumpwritedump