是否有人对以下崩溃的含义或调试方法有任何想法?
错误的应用程序名称:MyServer.exe,版本:0.0.0.0,时间戳:0x53d885f1
故障模块名称:WS2_32.dll_unloaded,版本:0.0.0.0,时间戳:0x4ce7ca25
异常代码:0xc0000005
故障偏移量:0x000007fefe67a0af
故障进程ID:0xcbc
错误的应用程序开始时间:0x01cfabbc216f52c2
错误的应用程序路径:[Path] /MyServer.exe
错误的模块路径:WS2_32.dll
报告ID:61efadce-17af-11e4-8301-001517d9c80a
当我将我的exe(非托管C ++)与托管C ++ dll(通过dllexport公开)链接时,就会发生这种情况。从windbg看来,崩溃是在加载所有模块之后立即发生的,甚至没有发生过:
(51d4.5e50):访问冲突-代码c0000005(第一次机会)在任何异常处理之前都会报告第一次机会异常。可能会预期并处理此异常。+ 0x1a0af:000007fe fe67a0af ?? ???
0:000> kP
Child-SP RetAddr Call Site
000000000020dc80 00000000 002a2700 <Unloaded_WS2_32.dll>+0x1a0af
000000000020dc88 00000000 002a2701 0x2a2700
000000000020dc90 00000000`00000000 0x2a2701
托管的C ++ dll是一个DNS库,它最终在下面调用WS2_32.dll。
奇怪的是,另一个使用相同托管C ++ dll的exe可以正常运行,并且我没有发现源/头文件之间的明显差异会导致这种不同的行为。如果我注释掉了(1)引用此托管dll的代码,或(2)我的exe文件中除引用托管dll的代码之外的所有其他内容,那么也不会发生崩溃。(2)工作的事实告诉我,至少所有dll依赖项都应该在工作目录中。
仅在Windows Server 2008 R2上会发生这种情况。我正在使用.Net 4.5。
有人有指针吗?