我有一个崩溃的小文件要分析。我的程序是多线程Qt5应用程序。我不是调试专家,但通常我可以很容易地找到程序失败的地方,但这次我不能。我在Visual Studio 2010中打开转储文件,单击"仅用本机调试",它告诉我问题出在哪里:它是带有位置"__CxxUnhandledExceptionFilter"的线程。调用栈是这样的:
msvcr100.dll()!_abort()
msvcr100.dll()!terminate()
program.exe!__CxxUnhandledExceptionFilter(_EXCEPTION_POINTERS * pPtrs)
KERNELBASE.dll!_UnhandledExceptionFilter()
ntdll.dll!__RtlUserThreadStart()
ntdll.dll!__RtlUserThreadStart()
我期望看到堆栈与程序函数和Qt内部函数。但是这个调用堆栈没有告诉我任何有趣的信息。所以请告诉我什么是"ExceptionFilter"线程,我怎么能找到程序失败的地方?
您正在查看应用程序,此时未处理的异常已经被默认异常过滤器捕获。
也就是说,您看不到发生异常的行。
不幸的是,这意味着迷你转储可能不包含有用的信息。
您可以尝试检查_EXCEPTION_POINTERS
结构,它可能包含触发未处理异常的指令的EIP
。
看pPtrs->ExceptionRecord->ExceptionAddress
的值,应该能容纳EIP
ExceptionAddress:异常发生的地址。
要获取异常发生点的堆栈跟踪,请阅读http://support.microsoft.com/kb/313109.