2009-12-21 14 views
11

Trên máy chủ sản xuất, tôi có thể thấy sự kiện này từ Trình xem sự kiện hệ thống khi ứng dụng ASP .NET bị treo :Ngoại lệ chưa xử lý khiến ứng dụng gặp sự cố với "EventType clr20r3, P1 w3wp.exe" trong nhật ký, nhưng không có chi tiết nào tại

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
hệ thống .dividebyzeroexception, P10 NIL. *

Nó thuộc về ".NET Runtime 2 .0 Báo cáo lỗi "danh mục.

Nhưng tôi không thể tìm thấy một sự kiện mà thuộc về "ASP.NET 2.0.50727.0" danh mục có thể cho tôi ngoại lệ này một cái nhìn chi tiết như thế này:

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 

Tôi có trường hợp thứ hai trên của tôi dev máy, là nó bởi vì Visual Studio được cài đặt ở đó? Nếu vậy, làm thế nào tôi có thể vô hiệu hóa điều này để tôi có thể mô phỏng môi trường sản xuất?

Trả lời

34

Đôi khi bạn có thể thấy lỗi đáng sợ này trong Windows Event Log:

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.

Như bạn có thể thấy nó không rõ ràng và không có dấu vết ngăn xếp và bạn không có bất kỳ ý tưởng nào về P1,…, P10 và bất kỳ số nào. Bạn biết phần tồi tệ nhất là gì; điều duy nhất khiến bạn không ngủ và làm cho bạn muốn nếu nó không có trong nhật ký, đúng vậy! Thông báo “dp.ui”.

Nguyên nhân

OK, bên cạnh của tất cả các câu nói đùa và những lời chúc, ngoại trừ “system.stackoverflowexception” được nâng lên khi một vòng lặp vô hạn hoặc phương pháp gọi điện thoại xảy ra, vì vậy bạn nên rà soát tất cả các nguồn cho bất kỳ sự kêu gọi phương pháp đệ quy và bạn có thể kích hoạt Visual Studi để gỡ lỗi đó. Nhưng nó không phải là có thể và khả thi tất cả các thời gian ngay cả khi ứng dụng của bạn không phải là doanh nghiệp. Vì vậy, bạn phải google cho P1, ..., P10. Tôi đã làm nó thay vì bạn, vì vậy chỉ cần ngồi lại và thư giãn!

P1: tên ứng dụng đó đã xảy ra lỗi này
P2: phiên bản ứng dụng
P3: ứng dụng thời gian tem
P4: hội/Module tên
P5: hội/Phiên bản mô-đun
P6: Dấu thời gian lắp ráp/mô-đun
P7: MethodDef
P8: IL bù đắp
P9: Tên ngoại lệ (băm vì tên quá dài)

Nghị quyết

Nó khá rõ ràng rằng chúng ta cần phải tìm P7, P8. IL Disassembler, một công cụ có trong Visual Studio, sẽ giúp chúng tôi làm điều đó.

  1. Thực thi IL Disassembler và mở thư viện của bạn.
  2. Menu: xem -> MetaInfo -> Hiển thị !, chú ý nhiều đến danh sách kiểm tra của menu, đặc biệt là các hộp kiểm Nguyên.
  3. Một hộp thoại sẽ xuất hiện, tìm kiếm kết hợp 06000 với 62e và bạn sẽ thấy MethodName của lớp và bằng cách tra cứu bạn sẽ thấy TypeDef đầu tiên khai báo lớp. Và đó là tất cả!

Khi bạn truy cập ứng dụng, bạn có thể thấy cuộc gọi đệ quy và bạn nên kiểm tra điều kiện thoát khỏi vòng lặp này!

Trong cửa sổ và ứng dụng dịch vụ ngoại lệ này có lẽ thích sau đây và bạn nên kiểm tra “sib.infobase.workflow.services.exe” bởi “IL disassembler”:

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.

Nếu bạn lướt trong net bạn có thể thấy một giải pháp như Microsoft đã chuẩn bị: http://support.microsoft.com/kb/911816, nhưng nó có thể không hoạt động đúng cho ngoại lệ này.

Tài liệu tham khảo

  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
+2

Đây là cực kỳ hữu ích, tôi đã có một tấn khó khăn khi tìm thông tin này trong Google. Cảm ơn! –

+2

@DanielBahmani: Cảm ơn Daniel đã cung cấp thông tin có giá trị. 1 cho câu trả lời tuyệt vời. –

+0

@DanielB vâng, xin lỗi vì sự khởi đầu muộn –