WER报告的神秘IL偏移量

时间:2015-12-28 10:41:41

标签: c# .net windows-error-reporting

我正在尝试解析Windows错误报告报告(Report.wer)。

以下是报告的一部分:

問題の署名

(其中Problem Signature表示System。)

由SO Deciphering the .NET clr20r3 exception parameters P1..P10讲授,我发现:

  • 错误汇编是版本2.0.0.0的06002919
  • 错误方法令牌为ef
  • 错误IL偏移量为ef

但问题是IL偏移值06002919

System的方法IL_00ef没有06002919

以下是方法 .method /*06002919*/ assembly hidebysig instance bool Poll(int32 microSeconds, valuetype System.Net.Sockets.SelectMode/*0200059D*/ mode) cil managed { // コード サイズ 81 (0x51) .maxstack 4 .locals /*11000641*/ init (class System.Net.Sockets.Socket/*020005A0*/ V_0, object[] V_1) IL_0000: ldarg.0 IL_0001: ldfld bool System.Net.Sockets.NetworkStream/*02000547*/::m_CleanedUp /* 040027EA */ IL_0006: brfalse.s IL_0019 IL_0008: ldarg.0 IL_0009: call instance class [mscorlib/*23000001*/]System.Type/*01000065*/ [mscorlib/*23000001*/]System.Object/*01000001*/::GetType() /* 0A00006C */ IL_000e: callvirt instance string [mscorlib/*23000001*/]System.Type/*01000065*/::get_FullName() /* 0A000136 */ IL_0013: newobj instance void [mscorlib/*23000001*/]System.ObjectDisposedException/*01000179*/::.ctor(string) /* 0A0006A9 */ IL_0018: throw IL_0019: ldarg.0 IL_001a: ldfld class System.Net.Sockets.Socket/*020005A0*/ System.Net.Sockets.NetworkStream/*02000547*/::m_StreamSocket /* 040027E5 */ IL_001f: stloc.0 IL_0020: ldloc.0 IL_0021: brtrue.s IL_0048 IL_0023: ldstr "net_io_readfailure" /* 70011B97 */ IL_0028: ldc.i4.1 IL_0029: newarr [mscorlib/*23000001*/]System.Object/*01000001*/ IL_002e: stloc.1 IL_002f: ldloc.1 IL_0030: ldc.i4.0 IL_0031: ldstr "net_io_connectionclosed" /* 70011BBD */ IL_0036: call string System.SR/*02000009*/::GetString(string) /* 06000029 */ IL_003b: stelem.ref IL_003c: ldloc.1 IL_003d: call string System.SR/*02000009*/::GetString(string, object[]) /* 06000028 */ IL_0042: newobj instance void [mscorlib/*23000001*/]System.IO.IOException/*01000161*/::.ctor(string) /* 0A0006FD */ IL_0047: throw IL_0048: ldloc.0 IL_0049: ldarg.1 IL_004a: ldarg.2 IL_004b: callvirt instance bool System.Net.Sockets.Socket/*020005A0*/::Poll(int32, valuetype System.Net.Sockets.SelectMode/*0200059D*/) /* 06002CDB */ IL_0050: ret } // end of method NetworkStream::Poll 的定义:

{{1}}

我误读了什么吗?如何正确解读WER报告?

上面IL转储的源System.dll来自我的开发计算机上的GAC(C:\ Windows \ assembly \ GAC_MSIL \ System \ 2.0.0.0__b77a5c561934e089),而不是目标计算机。

1 个答案:

答案 0 :(得分:1)

问题很可能是由于您尝试解码WER日志的计算机上的System.dll与发生异常的计算机之间的差异造成的。从发生异常的机器中获取System.dll并使用该文件。

例如在我的计算机上,此令牌(06002919)通向Timer构造函数:)

.class /*0200054C*/ abstract auto ansi nested assembly beforefieldinit Timer
...
{
  ...
  .method /*06002919*/ assembly hidebysig specialname rtspecialname 
        instance void  .ctor(int32 durationMilliseconds) cil managed
  {
    ...
    IL_0018:  ret
  } // end of method Timer::.ctor
}