Giải mã các tham số ngoại lệ .NET clr20r3 P1..P10


79

Tôi đang cố gắng giải mã ý nghĩa trên các tham số P1 ... P10 được liên kết với một thông số clr20r3được ghi vào nhật ký sự kiện khi ứng dụng của tôi gặp phải ngoại lệ.

Điều tốt nhất tôi có thể tìm thấy là:

  • P1 : quá trình lưu trữ ( ví dụ w3wp.exe )
  • P2 : phiên bản quy trình lưu trữ ( ví dụ 6.0.3790.1830 )
  • P3 : ??? ( vd 42435be1 )
  • P4 : assembly mà từ đó ngoại lệ được đưa ra ( ví dụ mrtables.webservice )
  • P5 : phiên bản lắp ráp ( ví dụ 2.1.2.0 )
  • P6 : ??? ( vd 4682617f )
  • P7 : ??? ( vd 129 )
  • P8 : ??? ( vd 50 )
  • P9 : loại ngoại lệ được nêu ra ( ví dụ system.argumentexception )
  • P10 : ??? ( vd NIL )

Googling cho clr20r3 cung cấp hàng nghìn giá trị tham số mẫu, từ đó ai đó có thể cố gắng lấy ra một mẫu.

Nhưng tôi hy vọng có tài liệu về các ý nghĩa tham số, trái ngược với các phỏng đoán có học.


Chỉnh sửa: Trong khi tôi có thể hy vọng vào tài liệu chuẩn, thực sự tôi rất vui khi thấy ngoại lệ được ném, ở dòng nào, hoàn chỉnh với một dấu vết ngăn xếp.

Đọc thêm


Câu trả lời:


81

Đây là thông tin về Watson Buckets

  1. Tên tệp Exe
  2. Số phiên bản lắp ráp tệp Exe
  3. Dấu tệp Exe
  4. Tên tập hợp đầy đủ của tệp Exe
  5. Phiên bản lắp ráp lỗi
  6. Dấu thời gian lắp ráp lỗi
  7. Phương pháp lắp ráp lỗi def
  8. Phương pháp lỗi IL Chênh lệch trong phương pháp lỗi
  9. Loại ngoại lệ

Và đây cũng là một bài báo MSDN tương tự.

Mẫu vật:

  Problem Signature 01: devenv.exe
  Problem Signature 02: 11.0.50727.1
  Problem Signature 03: 5011ecaa
  Problem Signature 04: Microsoft.VisualStudio.SharePoint.Project
  Problem Signature 05: 11.0.60226.0
  Problem Signature 06: 512c2dba
  Problem Signature 07: 18a8
  Problem Signature 08: 1d
  Problem Signature 09: System.NullReferenceException

2
Bạn có tình cờ có một liên kết tham khảo tài liệu cho phần còn lại của các thùng watson không? Bài viết được liên kết chỉ đề cập đến ba trong số chúng (và chỉ tình cờ đề cập đến chúng khi truyền "Ví dụ: nhóm P4 mô tả mô-đun lỗi, nhóm P9 hiển thị loại ngoại lệ đã được xử lý và nhóm P8 đại diện cho phần bù IL mà tại đó ngoại lệ ban đầu được ném ". )
Ian Boyd

2
Tôi đã thêm một mẫu về nó
Kiquenet

111

P7 và P8 là những thứ quan trọng để tìm ra nguyên nhân dẫn đến ngoại lệ P9. Sử dụng P4 để biết lắp ráp nào cần tìm. Chạy ildasm.exe và mở hội đồng đó. File + Dump, đánh dấu vào hộp kiểm "Token values", OK và lưu tệp .il vào đâu đó.

Mở tệp trong trình soạn thảo văn bản. P7 cung cấp cho bạn mã thông báo phương thức, nó bắt đầu bằng 0x06, tạo ra giá trị mã thông báo "06000129". Tìm kiếm:

.method /*06000129*/

Cung cấp cho bạn tên phương thức, hãy tìm kiếm từ đó để tìm .class, cung cấp cho bạn tên lớp.

P8 cung cấp cho bạn phần bù IL. Từ .method được tìm thấy, hãy tìm IL_0050 để biết hướng dẫn đã nêu ra ngoại lệ. Ánh xạ nó trở lại mã nguồn của bạn là một chút phức tạp nhưng có thể bạn sẽ hiểu ra. Sử dụng Reflector nếu cần thiết.

Nói chung, hãy viết một trình xử lý sự kiện AppDomain.UnhandledExceptionđể tránh những khó khăn của việc thiết kế ngược các nhóm sự cố Watson này. Ghi giá trị của e.ExceptionObject.ToString()để nhận cả thông báo ngoại lệ và dấu vết ngăn xếp.


2
Nếu ngoại lệ xảy ra trong mã thư viện, bạn có thể cần theo dõi ngăn xếp bằng mọi cách để tìm ra mã nào của bạn nằm trên ngăn xếp. (Sẽ được tốt đẹp nếu Microsoft sẽ thay đổi hộp thoại để được đẹp hơn để NET.)
Jason Kresowaty

1
Ngoài việc xử lý UnhandledException, nó cũng giúp thử / bắt ngay bên trong Main, vì đôi khi sự cố xảy ra trước khi trình xử lý UnhandledException được cài đặt.
Mark Lakata

1
Tôi nghĩ điều này sẽ cứu tôi bạn tôi. Tôi có một ứng dụng ASP.NET bị rơi trong lòng và liên tục gặp sự cố của nhóm ứng dụng - và một danh sách lỗi CLR20R3với một loạt các Pgiá trị đó đang được ghi lại ngay trong thời gian gặp sự cố. Nó có thể lộn xộn, nhưng nó có thể sẽ dẫn tôi đến một giải pháp, nhưng cuối cùng tôi sẽ phải sửa đổi mã này và có được một số ghi nhật ký thực sự đang diễn ra.
Mike Perrenoud

1
Rất hữu ích +10 nếu tôi có thể - trong trường hợp của tôi, đó là một ngoại lệ của StackOverFlow và blog bắt của tôi không thực thi.
Marc

1
Khi làm theo điều này, tôi nhận thấy hàm mà mã của chúng ta đang gặp sự cố là một hàm ảo trừu tượng .. method / * 06003452 * / public hidebysig newslot abstract virtual instance int32 Read ([in] [out] uint8 [] buffer, int32 offset, int32 count) cil Managed {} // end of method Stream :: Read
Steven Scott
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.