只有mian函数中的异常块可以生成dump文件 其他地方就生成不了
时间: 2024-03-27 12:35:17 浏览: 50
这个说法不太准确。在 Windows 系统中,无论在哪个函数中发生异常,只要程序崩溃了,就会生成 .dmp 文件,其中包含了程序崩溃时的一些现场信息,可以通过调试工具来分析崩溃原因。
在 Qt 工程中,如果在 main 函数中发生了异常,程序可以通过以下代码来进行处理,并生成 Dump 文件:
```
int main(int argc, char *argv[])
{
qInstallMessageHandler(myMessageOutput);
QApplication app(argc, argv);
try {
// ...
} catch (std::exception &e) {
qCritical() << "Exception caught: " << e.what();
return 1;
}
return app.exec();
}
```
这样,在异常发生时,程序会输出异常信息并退出,同时会生成一个 Dump 文件。
如果异常发生在其他函数中,可以通过使用 MiniDumpWriteDump 函数来手动触发生成 Dump 文件的功能。例如:
```
#include <windows.h>
#include <dbghelp.h>
void generateDump(EXCEPTION_POINTERS* pException)
{
HANDLE hDumpFile = CreateFile("myapp.dmp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hDumpFile != INVALID_HANDLE_VALUE) {
MINIDUMP_EXCEPTION_INFORMATION exceptionInfo;
exceptionInfo.ThreadId = GetCurrentThreadId();
exceptionInfo.ExceptionPointers = pException;
exceptionInfo.ClientPointers = FALSE;
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &exceptionInfo, NULL, NULL);
CloseHandle(hDumpFile);
}
}
void foo()
{
// ...
__try {
// ...
} __except (generateDump(GetExceptionInformation()), EXCEPTION_EXECUTE_HANDLER) {
// ...
}
}
```
这段代码中,我们定义了一个 generateDump 函数来生成 Dump 文件,并在 foo 函数中使用 __try 和 __except 块来捕获异常并触发生成 Dump 文件的功能。注意,这里的 EXCEPTION_EXECUTE_HANDLER 参数表示异常处理程序应该被执行。
阅读全文