我在Azure的Windows服务器VM上部署了C ++应用程序。
运行了好几天,然后WER进行了故障转储。错误的线程具有以下堆栈跟踪:
00 0000004a`7fb7ac00 00007ffa`9505e15f ucrtbase!abort+0x4e
01 0000004a`7fb7ac30 00007ffa`911239ba ucrtbase!terminate+0x1f
02 0000004a`7fb7ac60 00007ffa`9112c710 VCRUNTIME140!__std_terminate+0xa
03 0000004a`7fb7ac90 00007ffa`9112282a VCRUNTIME140!_CallSettingFrame+0x20
04 0000004a`7fb7acc0 00007ffa`91121b82 VCRUNTIME140!__FrameUnwindToState+0x136
05 (Inline Function) --------`-------- VCRUNTIME140!__FrameUnwindToEmptyState+0x7e
06 0000004a`7fb7ad30 00007ffa`9112be80 VCRUNTIME140!__InternalCxxFrameHandler+0x19a
07 0000004a`7fb7ad90 00007ffa`9897a5cd VCRUNTIME140!__CxxFrameHandler+0x90
08 0000004a`7fb7ade0 00007ffa`9891068a ntdll!RtlpExecuteHandlerForUnwind+0xd
09 0000004a`7fb7ae10 00007ffa`9112c249 ntdll!RtlUnwindEx+0x38a
0a 0000004a`7fb7b4f0 00007ffa`91122979 VCRUNTIME140!_UnwindNestedFrames+0x109
0b 0000004a`7fb7bab0 00007ffa`91122090 VCRUNTIME140!CatchIt+0xb5
0c 0000004a`7fb7bb30 00007ffa`91121c7e VCRUNTIME140!FindHandler+0x3f0
0d 0000004a`7fb7bc00 00007ffa`9112be80 VCRUNTIME140!__InternalCxxFrameHandler+0x296
0e 0000004a`7fb7bc60 00007ffa`9897a54d VCRUNTIME140!__CxxFrameHandler+0x90
0f 0000004a`7fb7bcb0 00007ffa`9890fcf3 ntdll!RtlpExecuteHandlerForException+0xd
10 0000004a`7fb7bce0 00007ffa`98911a09 ntdll!RtlDispatchException+0x373
11 0000004a`7fb7c3e0 00007ffa`95c53c58 ntdll!RtlRaiseException+0x2d9
12 0000004a`7fb7cbc0 00007ffa`91124572 KERNELBASE!RaiseException+0x68
13 0000004a`7fb7cca0 00007ffa`784bd3ce VCRUNTIME140!_CxxThrowException+0xc2
14 0000004a`7fb7cd20 00007ffa`78350000 MyModule!operator new[]+0x2e
15 0000004a`7fb7cd28 0000004a`7fb7cf88 MyModule!__imp_?id@?$codecvt@DDU_Mbstatet@@@std@@2V0locale@2@A
16 0000004a`7fb7cd30 00000000`00000000 0x0000004a`7fb7cf88
(我用MyModule替换了真实的模块名称!)
问题:
我正在猜测(通过栈跟踪中的函数名称,例如RtlpExecuteHandlerForException
),如果是处理异常的话。那是对的吗?如果是,为什么应用程序仍然崩溃?
堆栈底部的__imp_?id@?$codecvt@DDU_Mbstatet@@@std@@2V0locale@2@A
看上去很乱。我试图在网上取消整理并获得__imp_public: static class std::locale::id std::codecvt<char,char,struct _Mbstatet>::id
。那有意义吗?它看起来像是对字段的引用,而不是函数的引用
我尝试运行!analyze -v
,它给出了:
EXCEPTION_CODE:(NTSTATUS)0xc0000409-系统检测到溢出 此应用程序中基于堆栈的缓冲区的大小。这种超支可能 潜在地允许恶意用户对此进行控制 应用。
这种异常的原因是什么?您能否提供简短的代码段,以在Windows中触发此类异常?)