3

我有一个崩溃小型转储要分析。我的程序是多线程 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”线程,我怎样才能找到程序实际失败的地方?

4

1 回答 1

3

您正在查看应用程序,此时未处理的异常已被默认异常过滤器捕获。

也就是说,您没有看到发生异常的行。

不幸的是,这意味着小型转储可能不包含有用的信息。

您可以尝试检查_EXCEPTION_POINTERS结构,它可能包含EIP触发未处理异常的指令。

看到 的值pPtrs->ExceptionRecord->ExceptionAddress,那应该是持有的EIP

来自 MSDN:

ExceptionAddress:发生异常的地址。

要在异常发生时获取堆栈跟踪,请阅读http://support.microsoft.com/kb/313109

于 2014-03-28T15:03:23.770 回答