当定制的C++ Windows应用程序崩溃并生成空的dmp文件时,这通常意味着调试信息没有被正确地写入到dmp文件中。以下是一些基础概念、可能的原因以及解决方案:
确保应用程序配置了崩溃转储。可以通过修改注册表或在代码中设置来实现。
注册表方法:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps]
"DumpFolder"="C:\\CrashDumps"
"DumpType"=dword:00000002
代码方法:
使用Windows API函数SetErrorMode
和MiniDumpWriteDump
来设置崩溃转储。
#include <windows.h>
#include <dbghelp.h>
LONG WINAPI CustomUnhandledExceptionFilter(struct _EXCEPTION_POINTERS* ExceptionInfo) {
HANDLE hFile = CreateFile(L"C:\\CrashDumps\\crash.dmp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile != INVALID_HANDLE_VALUE) {
MINIDUMP_EXCEPTION_INFORMATION mdei;
mdei.ThreadId = GetCurrentThreadId();
mdei.ExceptionPointers = ExceptionInfo;
mdei.ClientPointers = FALSE;
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpNormal, &mdei, NULL, NULL);
CloseHandle(hFile);
}
return EXCEPTION_EXECUTE_HANDLER;
}
int main() {
SetUnhandledExceptionFilter(CustomUnhandledExceptionFilter);
// Your application code here
}
确保运行应用程序的用户具有足够的权限来创建文件。
暂时禁用防病毒软件,看看是否能生成有效的dmp文件。
使用内存检查工具如Valgrind(Windows版本)或Visual Studio的内存诊断工具来检查是否有内存损坏问题。
增加日志记录功能,在程序关键部分记录日志,以便在崩溃时能够提供更多上下文信息。
通过上述方法,通常可以解决C++ Windows应用程序崩溃并生成空dmp文件的问题。如果问题依然存在,可能需要进一步分析程序代码和运行环境。
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云