.NET clr20r3 예외 매개 변수 P1..P10 해독


79

clr20r3응용 프로그램에서 예외가 발생할 때 이벤트 로그에 기록되는 a와 관련된 P1 ... P10 매개 변수의 의미를 해독하려고합니다 .

내가 찾을 수 있었던 최고 는 :

  • 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 )

clr20r3에 대한 인터넷 검색 은 수천 개의 샘플 매개 변수 값을 제공하며,이 값에서 누군가가 패턴을 유도 할 수 있습니다.

그러나 나는 교육받은 추측과 달리 매개 변수 의미에 대한 문서를 기대하고 있습니다.


편집 : 정식 문서를 기대할 수는 있지만 실제로는 예외가 어떤 줄에서 스택 추적으로 완료되는 것을 보게되어 기쁩니다.

보너스 읽기


답변:


81

다음은 Watson Buckets에 대한 정보입니다.

  1. Exe 파일 이름
  2. Exe 파일 어셈블리 버전 번호
  3. Exe 파일 스탬프
  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
나머지 왓슨 버킷을 문서화하는 참조 링크가 있습니까? 링크 된 기사는 그중 세 가지만 언급합니다 ( 예를 들어, 버킷 P4는 오류가 발생한 모듈을 설명하고 버킷 P9는 처리되지 않은 예외 유형을 표시하며 버킷 P8은 예외가 발생한 IL 오프셋을 나타냅니다. 원래 던져졌습니다. " )
Ian Boyd

2
나는 그것에 대해 샘플을 추가 한
Kiquenet

111

P7 및 P8은 P9 예외가 발생한 위치를 알아내는 데 중요한 요소입니다. P4를 사용하여 찾을 어셈블리를 확인하십시오. ildasm.exe를 실행하고 해당 어셈블리를 엽니 다. 파일 + 덤프, "토큰 값"확인란을 선택하고 확인하고 .il 파일을 어딘가에 저장합니다.

텍스트 편집기에서 파일을 엽니 다. P7은 메소드 토큰을 제공하며 0x06으로 시작하여 토큰 값 "06000129"를 생성합니다. 검색 :

.method /*06000129*/

메소드 이름을 제공하고 거기에서 클래스 이름을 제공하는 .class를 찾으십시오.

P8은 IL 오프셋을 제공합니다. 찾은 .method에서 예외를 발생시킨 명령어에 대한 IL_0050을 찾습니다. 소스 코드에 다시 매핑하는 것은 약간 까다 롭지 만 아마 알아낼 것입니다. 필요한 경우 리플렉터를 사용하십시오.

일반적으로 AppDomain.UnhandledException이러한 Watson 크래시 버킷을 리버스 엔지니어링하는 고통을 피하기 위해 이벤트 핸들러를 작성하십시오 . e.ExceptionObject.ToString()예외 메시지와 스택 추적을 모두 가져 오려면 의 값을 기록하십시오 .


2
라이브러리 코드에서 예외가 발생하면 스택에있는 코드를 파악하기 위해 스택 추적이 필요할 수 있습니다. (Microsoft가 대화 상자를 .NET에 더 좋게 수정하면 좋을 것입니다.)
Jason Kresowaty

1
UnhandledException을 처리하는 것 외에도 때때로 UnhandledException 핸들러가 설치되기 전에 문제가 발생하기 때문에 Main 내에서 바로 시도 / 캐치하는 데 도움이됩니다.
Mark Lakata 2012

1
이것이 제 친구를 구해줄 것 같아요. 응용 프로그램 풀을 계속 충돌시키는 내 무릎에 떨어진 ASP.NET 응용 프로그램이 CLR20R3있으며 이러한 P값이 포함 된 오류 목록 이 충돌 시간에 바로 기록됩니다. 지저분해질 수 있지만 해결책으로 이어질 수 있지만 결국에는이 코드를 수정하고 실제 로깅을 진행해야합니다.
Mike Perrenoud 2013-04-02

1
가능한 경우 +10이 매우 유용합니다. 제 경우에는 StackOverFlow 예외 였고 내 catch 블로그가 실행되지 않았습니다.
Marc

1
다음으로 코드가 충돌하는 함수가 추상 가상 함수임을 발견했습니다. 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.