我的应用程序池每次都在IIS 6.0 MS Debug Diag中随机崩溃到kernel32.dll.
入口点始终是mscorwks!CreateApplicationContext + bbef,结果始终是System.UnauthorizedAccessException.
堆栈跟踪:
Function Arg 1 Arg 2 Arg 3 kernel32!RaiseException+3c e0434f4d 00000001 00000001 mscorwks!GetMetaDataInternalInterface+84a9 18316b3c 00000000 00000000 mscorwks!GetAddrOfContractShutoffFlag+ac01 18316b3c 00000000 023cfbd8 mscorwks!GetAddrOfContractShutoffFlag+ac73 00000000 000e8c88 8038b2d0 mscorwks!GetAddrOfContractShutoffFlag+aca4 18316b3c 00000000 023cfbe4 mscorwks!GetAddrOfContractShutoffFlag+acb2 18316b3c acc05c33 7a399bf0 mscorwks!CoUninitializeCor+67be 00000000 023cfc1c 023cfc8c mscorwks!CoUninitializeCor+87a1 001056e8 79fd87f6 023cfeb0 mscorwks!CorExitProcess+4ad3 023cfeb0 023cfd20 79f40574 mscorwks!CorExitProcess+4abf 001056e8 79f405a6 023cfd04 mscorwks!CorExitProcess+4b3e 000e8c88 00000000 023cfda7 mscorwks!StrongNameErrorInfo+1ddab 00000000 00000000 023cfeb0 mscorwks!StrongNameErrorInfo+1e07c 023cfeb0 00000000 00000000 mscorwks!CoUninitializeEE+4e0b 023cfeb0 023cfe5c 79f7762b mscorwks!CoUninitializeEE+4da7 023cfeb0 acc05973 00000000 mscorwks!CoUninitializeEE+4ccd 023cfeb0 00000000 001056e8 mscorwks!GetPrivateContextsPerfCounters+f1cd 79fc24f9 00000008 023cff14 mscorwks!GetPrivateContextsPerfCounters+f1de 79fc24f9 acc058c3 00000000 mscorwks!CorExeMain+1374 00000000 00000003 00000002 mscorwks!CreateApplicationContext+bc35 000e9458 00000000 00000000 kernel32!GetModuleHandleA+df 79f9205f 000e9458 00000000
有谁知道这意味着什么以及如何解决它?
编辑:上面的堆栈跟踪结果是一个症状,而不是原因.上面的堆栈跟踪仅显示非托管堆栈,但问题发生在托管代码中.我使用下面的答案中的步骤深入了解崩溃转储并提取托管异常.
对mscorwks.dll的引用只是问题的症状.mscorwks.dll是包含公共语言运行库的DLL.
为了诊断问题的根本原因,我按照以下步骤操作:
当IIS回收应用程序池时,使用DebugDiag捕获崩溃转储.
在windbg中打开崩溃转储.
在windbg命令行输入".loadby sos mscorwks"(无引号)以加载CLR调试工具
使用!PrintException命令打印出崩溃转储中记录的最后一个异常.这很可能是导致IIS应用程序池回收的原因
使用!clrstack命令查看引发异常的当前线程上的堆栈
可以在此处和此处找到更多关于windbg的命令参考.最后,这篇MSDN博客提供了有关使用windbg的精彩教程.
你的debuging冒险好运!