未處理的異常導致應用程序崩潰,日誌中顯示“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”消息。
原因
好的,除了所有的笑話和願望之外,當發生無限循環或方法呼叫時,會引發異常“system.stackoverflowexception”,因此您應該檢查所有源中是否存在任何遞歸方法呼叫,您可以啟動 Visual Studi 進行調試。但是,即使您的應用程序不是企業級的,也並非始終可行。所以你必須用Google搜尋 P1,…,P10。我代替你做的,所以請坐下來放鬆一下!
P1:發生此錯誤的應用程序名稱
P2:應用程序版本
P3:應用程序時間戳
P4:程序集/模組名稱
P5:程序集/模組版本
P6:程序集/模組時間戳
P7:MethodDef
P8:IL 偏移量
P9:異常名稱(散列,因為名字太長)
解決
很明顯,我們需要找到 P7、P8。IL Disassembler 是 Visual Studio 中包含的一個工具,它將幫助我們做到這一點。
- 執行 IL Disassembler,然後打開你的庫。
- 菜單:view -> MetaInfo -> Show!,注意菜單的檢查列表,尤其是 Raw 複選框。
- 將出現一個對話框,搜尋組合
06000,62e您將看到該類的 MethodName,通過查找您將看到第一個 TypeDef 聲明該類。就這樣!當你進入你的應用程序時,你可能會看到一個遞歸呼叫,你應該檢查使這個循環退出的條件!
在 Windows 和服務應用程序中,此異常可能如下所示,您應該通過“IL Disassembler”檢查“sib.infobase.workflow.services.exe”:
事件類型 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 zxkyzcs5wacordmkttdkr0NILr.os
如果您在網上沖浪,您可能會看到 Microsoft 準備的解決方案:http: //support.microsoft.com/kb/911816,但對於此異常,它可能無法正常工作。
更多資訊