解密.NET clr20r3异常参数P1..P10

Ian*_*oyd 76 .net clr exception

我试图破解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)

用于clr20r3的Google搜索提供了数千个样本参数值,有人可以尝试从中派生模式.

但我希望有关于参数含义的文档,而不是有根据的猜测.


编辑:虽然我可以希望规范文档,但我真的很高兴看到异常被抛出,在什么行,完成堆栈跟踪.

奖金阅读

Han*_*ant 107

P7和P8是找出引发P9异常的重要因素.使用P4了解要查找的程序集.运行ildasm.exe并打开该程序集.文件+转储,勾选"令牌值"复选框,确定并保存.il文件.

在文本编辑器中打开文件.P7为您提供方法令牌,它以0x06开头,产生令牌值"06000129".搜索:

.method /*06000129*/
Run Code Online (Sandbox Code Playgroud)

它为您提供了方法名称,从那里查找.class,它为您提供了类名.

P8为您提供IL偏移.从找到的.method中,查找引发异常的指令的IL_0050.将它映射回源代码有点棘手,但你可能会想出来.必要时使用反射器.

通常,编写一个事件处理程序,AppDomain.UnhandledException以避免对这些Watson崩溃桶进行逆向工程的痛苦.记录值e.ExceptionObject.ToString()以获取异常消息和堆栈跟踪.

  • 如果库代码中发生异常,您可能还需要堆栈跟踪来确定哪些代码在堆栈中.(如果微软将该对话框修改为更好的.NET,那会很好.) (2认同)

Nav*_*een 76

以下是有关Watson Buckets的信息

  1. Exe文件名
  2. Exe File程序集版本号
  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
Run Code Online (Sandbox Code Playgroud)

  • 您是否碰巧有一个参考链接记录了其余的Watson桶?链接的文章仅提及其中的三个(并且恰好在传递时提及它们)"例如,存储桶P4描述了故障模块,存储桶P9显示未处理的异常类型,存储桶P8表示IL偏移,其中异常最初被抛出."*) (2认同)
  • 我已经添加了一个关于它的样本 (2认同)