我有一个崩溃小型转储需要分析。我的程序是多线程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
.
来自 MSDN:
ExceptionAddress:异常发生的地址。
要获取异常发生点的堆栈跟踪,请阅读http://support.microsoft.com/kb/313109 http://support.microsoft.com/kb/313109.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)