Я пытаюсь расшифровать значение параметров 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 предоставляет тысячи значений параметров образца, из которых кто-то может попытаться получить шаблон.
Но я надеюсь на документацию по значениям параметра, в отличие от образованных догадок.
Изменить: Пока я могу надеяться на каноническую документацию, я был бы рад видеть, что исключение выбрано, в какой строке завершена трассировка стека.
Ответ 1
Вот информация о Watson Buckets
- Имя файла Exe
- Номер версии сборки файла Exe
- Exe File Stamp
- Имя полной версии файла Exe
- Неисправность сборки
- Временная метка сбоя
- Неисправный метод сборки def
- Способ устранения. IL Смещение в пределах метода сбоя
- Тип исключения
А также здесь статья 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()
, чтобы получить как сообщение исключения, так и трассировку стека.