Подтвердить что ты не робот

Расшифровка параметров исключения .NET clr20r3 P1..P10

Я пытаюсь расшифровать значение параметров P1... P10, связанных с clr20r3, которое записывается в журнал событий, когда мое приложение испытывает исключение.

Лучшее, что я смог найти:

  • P1: процесс хостинга (например, w3wp.exe)
  • P2: версия процесса хостинга (например, 6.0.3790.1830)
  • P3:??? (например, 42435be1)
  • P4: сборка, из которой было создано исключение (например, mrtables.webservice)
  • P5: версия сборки (например, 2.1.2.0)
  • P6:??? (например, 4682617f)
  • P7:??? (например, 129)
  • P8:??? (например, 50)
  • P9: тип исключения поднят (например, system.argumentexception)
  • P10:??? (например, NIL)

Googling для clr20r3 предоставляет тысячи значений параметров образца, из которых кто-то может попытаться получить шаблон.

Но я надеюсь на документацию по значениям параметра, в отличие от образованных догадок.


Изменить: Пока я могу надеяться на каноническую документацию, я был бы рад видеть, что исключение выбрано, в какой строке завершена трассировка стека.

4b9b3361

Ответ 1

Вот информация о Watson Buckets

  1. Имя файла Exe
  2. Номер версии сборки файла Exe
  3. Exe File Stamp
  4. Имя полной версии файла Exe
  5. Неисправность сборки
  6. Временная метка сбоя
  7. Неисправный метод сборки def
  8. Способ устранения. IL Смещение в пределах метода сбоя
  9. Тип исключения

А также здесь статья MSDN на том же самом.

Образец:

  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

P7 и P8 являются важными, чтобы выяснить, где было создано исключение P9. Используйте P4, чтобы узнать, какую сборку нужно искать. Запустите ildasm.exe и откройте эту сборку. Файл + Дамп, отметьте флажок "Значения токена", ОК и сохраните файл .il где-нибудь.

Откройте файл в текстовом редакторе. P7 дает вам токен метода, он начинается с 0x06, производя токеновое значение "06000129". Поиск:

.method /*06000129*/

Что дает вам имя метода, посмотрите оттуда, чтобы найти .class, который дает вам имя класса.

P8 дает вам смещение IL. Из найденного метода найдите IL_0050 для инструкции, которая вызвала исключение. Сопоставление его с исходным кодом немного сложно, но вы, вероятно, поймете это. При необходимости используйте рефлектор.

В общем, напишите обработчик событий для AppDomain.UnhandledException, чтобы избежать боли обратного проектирования этих ковшей Watson. Запишите значение e.ExceptionObject.ToString(), чтобы получить как сообщение исключения, так и трассировку стека.