解密.NET clr20r3exception参数P1..P10

我试图破译与应用程序遇到exception时写入事件日志的clr20r3相关联的P1 … P10参数的含义。

我能find的最好的是:

  • P1 :主机进程( 例如 w3wp.exe
  • P2 :主机进程版本( 例如 6.0.3790.1830
  • P3 :??? ( 例如 42435be1
  • P4 :引发exception的程序集( 例如 mrtables.webservice
  • P5 :程序集版本( 例如 2.1.2.0
  • P6 : ( 例如 4682617f
  • P7 : ( 例如 129
  • P8 : ( 例如 50
  • P9 :引发的exceptiontypes( 例如 system.argumentexception
  • P10 : ( 例如 NIL

谷歌searchclr20r3提供了数以千计的样本参数值,从中可以尝试派生一个模式。

但是我希望能够提供关于参数含义的文档,而不是受过教育的猜测。


编辑:虽然我可以希望规范的文档,我真的很高兴看到exception被抛出,在哪一行,完成一个堆栈跟踪。

这里是沃森桶的信息

  1. exe文件名称
  2. exe文件程序集版本号
  3. 埃克文件邮票
  4. exe文件的完整程序集名称
  5. 错误汇编版本
  6. 错误汇编时间戳
  7. 错误组装方法def
  8. 错误方法IL错误方法内的偏移量
  9. exceptiontypes

这里也是一个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 

P7和P8是找出P9exception提出的重要位置。 使用P4知道要查找什么程序集。 运行ildasm.exe并打开该程序集。 文件+转储,勾选“令牌值”checkbox,确定并保存.il文件的某个地方。

在文本编辑器中打开文件。 P7给你的方法令牌,它从0x06开始,产生令牌值“06000129”。 search:

 .method /*06000129*/ 

哪个给你的方法名称,从那里查找find.class,给你的类名称。

P8给你的IL抵消。 从find的.method,寻找引发exception的指令IL_0050。 把它映射回你的源代码有点棘手,但你可能会想出来。 必要时使用reflection器。

通常,为AppDomain.UnhandledException编写一个事件处理程序,以避免对这些Watson故障存储桶进行反向工程的痛苦。 logginge.ExceptionObject.ToString()的值以获取exception消息和堆栈跟踪。