Vb.net 非托管第一次机会异常是否会导致崩溃/重新启动?

Vb.net 非托管第一次机会异常是否会导致崩溃/重新启动?,vb.net,windbg,heap-corruption,first-chance-exception,adplus,Vb.net,Windbg,Heap Corruption,First Chance Exception,Adplus,后续问题:“在调查崩溃时,我是否应该只调查第二次机会异常?在什么情况下,我还需要调查第一次机会异常转储?” 我的问题有点宽泛,但我想知道真正的答案是什么。我读过很多文章,说第一次机会异常不太可能导致应用程序崩溃;这是第二次机会导致它。简单的谷歌搜索并不能直接回答我的问题 编辑:以下是示例文章,但还有许多其他文章: : 对于无异常处理的代码,调试器将收到 第二次机会异常通知,并将以未处理的 例外。” 根据定义,只有第二次机会的异常才能导致代码崩溃, i、 e.代码未处理的问题 我有一个间歇性的问

后续问题:“在调查崩溃时,我是否应该只调查第二次机会异常?在什么情况下,我还需要调查第一次机会异常转储?”

我的问题有点宽泛,但我想知道真正的答案是什么。我读过很多文章,说第一次机会异常不太可能导致应用程序崩溃;这是第二次机会导致它。简单的谷歌搜索并不能直接回答我的问题

编辑:以下是示例文章,但还有许多其他文章:

:

对于无异常处理的代码,调试器将收到 第二次机会异常通知,并将以未处理的 例外。”

根据定义,只有第二次机会的异常才能导致代码崩溃, i、 e.代码未处理的问题

我有一个间歇性的问题,我的应用程序重新启动或崩溃(事件查看器中没有错误),但在它重新启动之前,Adplus会生成一些首次访问违规异常。没有第二次机会例外

以下是WinDbg.exe上FULLDUMP_FirstChance_av_AccessViolation的一个片段:

PROBLEM_CLASSES: 
HEAP_CORRUPTION
    Tid    [0x16e8]
    Frame  [0x02]: ntdll!RtlAllocateHeap
HEAP_CORRUPTION
    Tid    [0x16e8]
    Frame  [0x02]: ntdll!RtlAllocateHeap
INVALID_POINTER_READ
    Tid    [0x16e8]
    Frame  [0x00]: ntdll!ExpInterlockedPopEntrySListFault
NOSOS
    Tid    [0x16e8]
BUGCHECK_STR:  HEAP_CORRUPTION_HEAP_CORRUPTION_INVALID_POINTER_READ_NOSOS
下面是示例调用堆栈:

# ChildEBP RetAddr  Args to Child              
00 085aec28 7c91020e 00000007 00c407d8 00c40000 ntdll!ExpInterlockedPopEntrySListFault (FPO: [0,2,0])
01 085aec58 7c91019b 00c407d8 00000030 00000000 ntdll!RtlpAllocateFromHeapLookaside+0x1d (FPO: [Non-Fpo])
02 085aee84 78134d83 00c40000 00000000 00000030 ntdll!RtlAllocateHeap+0x1c2 (FPO: [Non-Fpo])
03 085aeea4 78160e30 00000030 0000002f 085aeecc msvcr80!malloc(unsigned int size = 0x30)+0x7a (FPO: [1,0,0]) (CONV: cdecl) [f:\dd\vctools\crt_bld\self_x86\crt\src\malloc.c @ 163]
04 085aeebc 7c4221b3 00000030 00000003 7c422f20 msvcr80!operator new(unsigned int size = 0x30)+0x1d (FPO: [Non-Fpo]) (CONV: cdecl) [f:\dd\vctools\crt_bld\self_x86\crt\src\new.cpp @ 59]
05 085aeed4 7c423315 00000030 00000000 ae218f51 msvcp80!std::_Allocate<char>(unsigned int _Count = 0x30, char * __formal = 0x00000000 "")+0x15 (FPO: [Non-Fpo]) (CONV: cdecl) [f:\dd\vctools\crt_bld\self_x86\crt\src\xmemory @ 44]
06 085aef0c 7c4233c4 0000002a 00000000 085af028 msvcp80!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Copy(unsigned int _Newsize = 0x2a, unsigned int _Oldlen = 0)+0x55 (FPO: [Non-Fpo]) (CONV: thiscall) [f:\dd\vctools\crt_bld\self_x86\crt\src\xstring @ 2020]
07 085aef20 7c423779 0000002a 00000000 085af200 msvcp80!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Grow(unsigned int _Newsize = 0x2a, bool _Trim = false)+0x22 (FPO: [2,0,0]) (CONV: thiscall) [f:\dd\vctools\crt_bld\self_x86\crt\src\xstring @ 2050]
08 085aef3c 7c425e55 0000002a 00000000 0000002a msvcp80!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::append(class std::basic_string<char,std::char_traits<char>,std::allocator<char> > * _Right = 0x0000002a, unsigned int _Roff = 0, unsigned int _Count = 0x2a)+0x58 (FPO: [Non-Fpo]) (CONV: thiscall) [f:\dd\vctools\crt_bld\self_x86\crt\src\xstring @ 969]
09 085aef4c 60baed1e 085af028 ae262fd2 085af1a4 msvcp80!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::append(class std::basic_string<char,std::char_traits<char>,std::allocator<char> > * _Right = 0x085af028 " S1 S1 Card number:    ************8706  
")+0xd (FPO: [1,0,0]) (CONV: thiscall) [f:\dd\vctools\crt_bld\self_x86\crt\src\xstring @ 956]
0a 085af1a4 7c802662 00000100 00000000 00000000 aipoptrv19!DllUnregisterServer+0x1f15e
0b 085af234 7c42317a 00000000 00000000 0000000f kernel32!WaitForSingleObject+0x12 (FPO: [Non-Fpo])
0c 085af274 60bc1fd8 60baa1cb 0865d680 0000001c msvcp80!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> >(void)+0x11 (FPO: [0,0,4]) (CONV: thiscall) [f:\dd\vctools\crt_bld\self_x86\crt\src\xstring @ 576]
0d 085af278 60baa1cb 0865d680 0000001c 00000002 aipoptrv19!DllUnregisterServer+0x32418
0e 085af2e4 60bb227c 00000001 085af420 0865d648 aipoptrv19!DllUnregisterServer+0x1a60b
0f 085af34c 7c425e45 085af404 00000000 ffffffff aipoptrv19!DllUnregisterServer+0x226bc
10 085af35c 60b97724 72506f44 69746e69 0000676e msvcp80!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::assign(class std::basic_string<char,std::char_traits<char>,std::allocator<char> > * _Right = 0x72506f44)+0xd (FPO: [1,0,0]) (CONV: thiscall) [f:\dd\vctools\crt_bld\self_x86\crt\src\xstring @ 1044]
11 085af45c 78261414 00000002 403110f4 7824f516 aipoptrv19!DllUnregisterServer+0x7b64
12 085af468 7824f516 fffffffe 781f2c2e 0000001c mfc80!_AfxDispatchCall(<function> * __formal = 0x40b59c84, void * __formal = 0x085af6b8, unsigned int __formal = 0x85a0003)+0x10 (CONV: stdcall) [f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\olecall.cpp @ 40]
13 085af470 781f2c2e 0000001c 7824f49b 00000008 mfc80!CCmdTarget::CallMemberFunc(struct AFX_DISPMAP_ENTRY * pEntry = 0x6d756e20, unsigned short wFlags = 0x6562, struct tagVARIANT * pvarResult = 0x20202020 Empty, struct tagDISPPARAMS * pDispParams = 0x2a2a2a2a, unsigned int * puArgErr = 0x2a2a2a2a)+0x1ad (CONV: thiscall) [f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\oledisp1.cpp @ 1064]
#ChildEBP将参数重新寻址到Child
00 085aec28 7c91020e 0000000 7 00c407d8 00c40000 ntdll!ExpInterlocatedPopEntrySlistFault(FPO:[0,2,0])
01 085aec58 7c91019b 00c407d8 000000 30 00000000 ntdll!RtlpAllocateFromHeapLookaside+0x1d(FPO:[非FPO])
02 085aee84 78134d83 00c40000 00000000000030 ntdll!RTLALLOCATHEAP+0x1c2(FPO:[非FPO])
03 085aeea4 78160e30 000000 3000万2F 085aeecc msvcr80!malloc(unsigned int size=0x30)+0x7a(FPO:[1,0,0])(CONV:cdecl)[f:\dd\vctools\crt\u bld\self\u x86\crt\src\malloc.c@163]
04 085aeebc 7c4221b3 000000 3000万3 7c422f20 msvcr80!新运算符(无符号整数大小=0x30)+0x1d(FPO:[非FPO])(CONV:cdecl)[f:\dd\vctools\crt\u bld\self\u x86\crt\src\new.cpp@59]
05 085aeed4 7c423315 000000 30 00000000 ae218f51 msvcp80!std::_Allocate(unsigned int(unsigned int)Count=0x30,char*(unsigned int)formal=0x00000000“)+0x15(FPO:[非FPO])(CONV:cdecl)[f:\dd vctools\crt\u bld\self\u x86\crt\src\xmemory@44]
06 085aef0c 7C4233C40000002A 00000000 085af028 msvcp80!std::basic_string::_Copy(unsigned int(unsigned int)Newsize=0x2a,unsigned int(unsigned int)Oldlen=0)+0x55(FPO:[非FPO])(CONV:thiscall)[f:\dd vctools\crt_bld\self x86\crt\src\xstring@2020]
07 085aef20 7c423779 0000002a 00000000 085af200 msvcp80!std::basic_string::_Grow(unsigned int(unsigned int)Newsize=0x2a,bool(unsigned int)Trim=false)+0x22(FPO:[2,0,0])(CONV:thiscall)[f:\dd vctools\crt_bld\self x86\crt\src\xstring@2050]
08 085aef3c 7c425e55 0000002a 0000000000002A msvcp80!std::basic_string::append(类std::basic_string*_Right=0x0000002a,unsigned int_Roff=0,unsigned int_Count=0x2a)+0x58(FPO:[非FPO])(CONV:thiscall)[f:\dd vctools\crt_bld\self_x86\crt\src\xstring@969]
09 085aef4c 60baed1e 085af028 ae262fd2 085af1a4 msvcp80!std::basic_string::append(类std::basic_string*_Right=0x085af028“S1 S1卡号:****************8706
“”+0xd(FPO:[1,0,0])(CONV:thiscall)[f:\dd\vctools\crt\u bld\self\u x86\crt\src\xstring@956]
0a 085af1a4 7c802662 00000100 00000000 00000000 aipoptrv19!DllUnregisterServer+0x1f15e
0b085af234 7c42317a 0000000000000000000000000000000000000f内核32!WaitForSingleObject+0x12(FPO:[非FPO])
0c 085af274 60bc1fd8 60baa1cb 0865d680 000000 1C msvcp80!std::basic_string::basic_string(void)+0x11(FPO:[0,0,4])(CONV:thiscall)[f:\dd\vctools\crt\u bld\self\u x86\crt\src\xstring@576]
0d 085af278 60baa1cb 0865D68000001C0000002 aipoptrv19!DllUnregisterServer+0x32418
0e 085af2e4 60bb227c 0000000 1 085af420 0865d648 aipoptrv19!DllUnregisterServer+0x1a60b
0f 085af34c 7c425e45 085AF40400000000 ffffffff aipoptrv19!DllUnregisterServer+0x226bc
10 085af35c 60b97724 72506f44 69746e69 0000676e msvcp80!std::basic_string::assign(类std::basic_string*_Right=0x72506f44)+0xd(FPO:[1,0,0])(CONV:thiscall)[f:\dd\vctools\crt\u bld\self_x86\crt\src\xstring@1044]
11085AF45C 78261414 0000000 2 403110f4 7824f516 aipoptrv19!DllUnregisterServer+0x7b64
12085AF468 7824f516 FFFFFFF E 781f2c2e 000000 1C mfc80_AfxDispatchCall(*uuuuu-formal=0x40b59c84,void*\uuuu-formal=0x085af6b8,unsigned int-uuuuu-formal=0x85a0003)+0x10(CONV:stdcall)[f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\ollecall.cpp@40]
13085AF470 781f2c2e 0000001c 7824f49b 0000000 8 mfc80!CCmdTarget::CallMemberFunc(struct AFX_DISPMAP_ENTRY*pEntry=0x6d756e20,无符号短wFlags=0x6562,struct tagVARIANT*pvarResult=0x202020 Empty,struct tagdisparams*pdisparams=0x2a2a2a,unsigned int*puArgErr=0x2a2a2a2a2a)+0x1ad(CONV:this调用)[:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\oledisp1@1064]
这个错误是关于堆损坏和无效指针的,我还在研究。我对堆和malloc完全是新手,我刚刚学会了使用WinDbg进行调试。我只是想知道我是否在浪费时间学习内存分配,而这不是我的优先事项,也不会真正解决我的问题。(当然,了解堆是一件好事,但解决主要问题是头等大事)

我对我的adplus配置文件很有信心,我确信它会对所有二次机会异常生成完全转储。我在一个示例应用程序上试用了它

应用程序没有崩溃,只是意外地、间歇地重新启动,没有出现事件查看器错误。当使用特定服务时,可以间歇性地重新创建它

如果转储文件不是问题的真正原因,以下是我可能的想法:

  • 其他进程(未连接到我的adplus)导致重新启动
  • 第二次机会异常完全转储未生成
  • 其他人(有什么想法?)
PS:很抱歉,我没有说明一些细节和代码示例等,因为这是保密的。我尽了最大努力解释了这个问题,但没有损害公司利益
SomeObject o = null;
try {
    throw new Exception("First chance"); // consider this in some method
    o = new SomeObject();
}
catch (Exception)
{
    // make sure that the exception does not become a second chance exception
}
o.DoSomething(); // causes NullReferenceException first chance and second chance if uncaught