我在其中一个崩溃转储中有以下调用堆栈:
ChildEBP RetAddr Args to Child
1ac5f400 74e68ed7 1ac5feb4 1ac5f6d8 1ac5f420 mfc80u!ATL::CSimpleStringT<wchar_t,1>::GetString (FPO: [0,0,0]) (CONV: thiscall) [f:\dd\vctools\vc7libs\ship\atlmfc\include\atlsimpstr.h @ 548]
1ac5fec0 6e8c818e 19850020 06b11c25 00000000 msvcr80!_NLG_Return (FPO: [Uses EBP] [3,0,4]) [F:\dd\vctools\crt_bld\SELF_X86\crt\prebuild\eh\i386\lowhelpr.asm @ 73]
1ac5ff48 74e429bb 068be410 06b11cdd 00000000 mfc80u!_AfxThreadEntry+0xf2 (CONV: stdcall) [f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\thrdcore.cpp @ 109]
1ac5ff80 74e42a47 00000000 76833677 18f8c190 msvcr80!_callthreadstartex+0x1b (FPO: [Non-Fpo]) (CONV: cdecl) [f:\dd\vctools\crt_bld\self_x86\crt\src\threadex.c @ 348]
1ac5ff88 76833677 18f8c190 1ac5ffd4 77569f02 msvcr80!_threadstartex+0x66 (FPO: [1,0,4]) (CONV: stdcall) [f:\dd\vctools\crt_bld\self_x86\crt\src\threadex.c @ 326]
1ac5ff94 77569f02 18f8c190 4f59c6d6 00000000 kernel32!BaseThreadInitThunk+0xe (FPO: [Non-Fpo])
1ac5ffd4 77569ed5 74e429e1 18f8c190 00000000 ntdll!__RtlUserThreadStart+0x70 (FPO: [Non-Fpo])
1ac5ffec 00000000 74e429e1 18f8c190 00000000 ntdll!_RtlUserThreadStart+0x1b (FPO: [Non-Fpo])
现在,从这个调用堆栈中可以清楚地看出,它是应用程序中以AfxBeginThread
启动的线程之一:因此调用堆栈上的_AfxThreadEntry
。查看我的VS2005安装文件夹的thrdcore.cpp的第109行,我还可以看到这是调用线程过程的行:
// C:\Program Files (x86)\Microsoft Visual Studio 8\VC\atlmfc\src\mfc\thrdcore.cpp
107 if (pThread->m_pfnThreadProc != NULL)
108 {
109 nResult = (*pThread->m_pfnThreadProc)(pThread->m_pThreadParams);
110 ASSERT_VALID(pThread);
111 }
现在这一切看起来都不错,但上面两行对我没有任何意义 - 好吧,在字符串操作中有某种形式的崩溃... !analyze -v
输出:
FAILURE_BUCKET_ID: INVALID_POINTER_READ_c0000005_mfc80u.dll!ATL::CSimpleStringT_wchar_t,1_::GetString
BUCKET_ID: APPLICATION_FAULT_INVALID_POINTER_READ_mfc80u!ATL::CSimpleStringT_wchar_t,1_::GetString+0
这看起来确实很可疑,因为看这个函数似乎没有任何访问违规。
仍然知道msvcr80!_NLG_Return
是什么可能会帮助我更接近实际问题...?
答案 0 :(得分:2)
这表示您从析构函数中抛出异常。
请使用s-d esp l100000 1003f
进行查找。