我有一个崩溃微型转储文件来分析。我的程序是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。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句