未处理的exception导致应用程序崩溃与“EventType clr20r3,P1 w3wp.exe”在日志中,但没有详细信息

在生产服务器上,当ASP .NET应用程序崩溃时,可以从系统事件查看器中看到此事件:

EventType clr20r3,P1 w3wp.exe,P2 6.0.3790.3959,P3 45d691cc,
P4 app_web_default.aspx.cdcab7d2,P5 0.0.0.0,P6 4b2e4bf0,P7 4,P8 4,P9
system.dividebyzeroexception,P10 NIL。*

它属于“.NET运行时2.0错误报告”类别。

但我找不到属于“ASP.NET 2.0.50727.0”类别的事件,可以给我这个例外一个详细的视图,如下所示:

An unhandled exception occurred and the process was terminated. Application ID: /LM/W3SVC/505951206/Root Process ID: 1112 Exception: System.DivideByZeroException Message: Attempted to divide by zero. StackTrace: at _Default.Foo(Object state) at System.Threading.ExecutionContext.runTryCode(Object userData) at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal(_ThreadPoolWaitCallback tpWaitCallBack) at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(Object state) For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp 

我有我的开发机器上的第二个事件,是因为Visual Studio安装在那里? 如果是这样,我怎么能禁用这个,所以我可以模仿生产环境?

有时候,您可能会在Windows事件日志中看到这个可怕的错误:

EventType clr20r3,P1 w3wp.exe,P2 6.0.3790.3959,P3 45d6968e,P4 dp.ui,P5 3.9.7.55,P6 4b49a307,P7 62e,P8 0,P9 system.stackoverflowexception,P10 NIL。

正如你可以看到它不清楚,没有堆栈跟踪,你不知道P1,…,P10和任何数字。 你知道哪一个最糟糕的是 唯一让你不睡觉,让你如果不在日志里的话,是的! “dp.ui”消息。

原因

OK,除了所有的笑话和祝福之外,当无限循环或方法调用发生时,会引发异常“system.stackoverflowexception”,因此您应该检查所有源的递归方法调用,并且可以启动Visual Studi来调试它。 但即使你的申请不是企业,也不可能一直可行。 所以你必须为P1,…,P10谷歌。 我做的不是你,所以请坐下来放松一下!

P1 :发生此错误的应用程序名称
P2 :应用程序版本
P3 :申请时间戳
P4 :装配/模块名称
P5 :装配/模块版本
P6 :装配/模块时间戳
P7 :MethodDef
P8 :IL偏移量
P9 :异常名称(因名称过长而散列)

解析度

很明显,我们需要找到P7,P8。 IL反汇编程序,Visual Studio中包含的一个工具,将帮助我们做到这一点。

  1. 执行IL Disassembler,并打开你的库。
  2. 菜单:查看 – >元信息 – >显示!,注意菜单的检查列表,特别是原始复选框。
  3. 将出现一个对话框,搜索与62e组合06000 ,您将看到该类的MethodName,并通过查找您将看到第一个TypeDef声明类。 就这样!

当你去你的应用程序,你可能会看到递归调用,你应该检查使这个循环退出的条件!

在Windows和服务应用程序中,这个异常可能如下所示,你应该通过“IL Disassembler”来检查“sib.infobase.workflow.services.exe”:

EventType clr20r3,P1 sib.infobase.workflow.services,P2 1.0.2740.20114,P3 468a74f5,P4 sbpscs,P5 1.0.2740.20087,P6 468a74be,P7 1c,P8 120,P9 zxkyzcs5wacordmkttdkr1xouosi00fr,P10 NIL。

如果你在网上冲浪,你可能会看到像微软这样的解决方案: http : //support.microsoft.com/kb/911816 ,但是这个例外可能无法正常工作。

参考

  1. http://www.netframeworkdev.com/common-language-runtime/clr20r3-from-a-windows-service-calling-a-dot-net-dll-32830.shtml
  2. http://social.msdn.microsoft.com/Forums/en-US/netfxtoolsdev/thread/ec36eff9-ac9f-46da-afa1-92be489d6a56