FAST_FAIL_FATAL_APP_EXIT的WinDbg故障转储分析

问题描述

我正在查看一个C ++应用程序的故障转储,可以看到该应用程序因FAST_FAIL_FATAL_APP_EXIT而崩溃。

下面的堆栈框架表明未处理的异常ntdll!RcConsolidateFrames + 0x6。

我想知道您是否可以帮助我向正确的方向介绍如何跟踪发生异常的地方。

msvcr120!abort+0x34
msvcr120!terminate+0x1e
msvcp120!_Call_func$catch$0+0x13
msvcr120!_CallSettingFrame+0x20
msvcr120!__CxxCallCatchBlock+0xf5
ntdll!RcConsolidateFrames+0x6
msvcp120!_Call_func+0x14
msvcr120!_callthreadstartex+0x17
msvcr120!_threadstartex+0x102
kernel32!BaseThreadInitThunk+0x14
ntdll!RtlUserThreadStart+0x21

解决方法

调用堆栈有两个线索; $catch$terminate。这暗示了未捕获的异常,至少是您的代码未捕获的异常。这里有两种主要情况需要考虑:要么错过了处理程序,要么无法捕获异常,因为它是从析构函数抛出的。

要区分这两种情况,可以在所有线程入口点的顶层添加自己的catch(...) { std::terminate();}。这只会遇到第一种情况。如果相同的调用堆栈继续发生异常,则应怀疑是析构函数。