0

CLR20R3在运行的 ASP.NET 应用程序中遇到错误。我知道最后我需要捕捉到这个错误 - 很明显 - 但这是我在 PROD 中解决这个问题后要完成的维护任务。我不能直接进入维护任务的原因是,要在所有较低的环境中测试和批准这些更改,然后最终到 PROD,需要大量的工作和时间。

该错误表明该P7值为,因此在从有问题的程序集(这不是我的程序集)4dd获得 IL 转储后,我找到了该代码。我也在方法标记之后显示了几行,因为我认为那些引用了被调用方法中的违规行:

IL_0040:  callvirt   instance int32 IBM.WMQ.MQTCPConnection/*02000072*/::SendData(uint8[],
                                                                                  int32,
                                                                                  int32) /* 060004DD */
IL_0045:  stloc.0
IL_0046:  leave.s    IL_0055

现在,考虑到这一点,这是一个很好的问题,因为我试图将其映射回有问题的程序集的反编译代码。

IL_0046: leave.s IL_0055该行是否指被调用方法中失败的行?

因为如果是这样,下面是匹配的行,以及前面的一些似乎相关的代码:

IL_0044:  callvirt   instance int32 [System/*23000002*/]System.Net.Sockets.Socket/*0100000E*/::Send(uint8[],
                                                                                                    int32,
                                                                                                    int32,
                                                                                                    valuetype [System/*23000002*/]System.Net.Sockets.SocketFlags/*01000060*/) /* 0A0000F9 */
IL_0049:  stloc.0
IL_004a:  ldarg.0
IL_004b:  ldc.i4     0x92
IL_0050:  ldstr      "Send returned " /* 700028D5 */
IL_0055:  ldloc.0

但是,我很难证明这就是它所指的东西,因为汉斯在这篇文章中说该P8值是偏移量或违规行,除此之外不会有任何问题。异常表示该P8值为7d

4

2 回答 2

1

leave.s IL_0055没有引用被调用的方法。该P7值表明错误发生在 内IBM.WMQ.MQTCPConnection.SendData,因此您需要在那里查看(而不是在调用它的方法中)。

由于P8is 7d,您应该在IL_007d内部查看IBM.WMQ.MQTCPConnection.SendData- 与您从中获取第二个片段的方法相同。

于 2013-04-02T12:09:06.380 回答
1

P7 指的是发生异常的方法的方法标记。因此,崩溃在 内IBM.WMQ.MQTCPConnection::SendData,因为显然,这是对应于 4DD 令牌的方法。您发现的只是对该方法的调用(可能与问题无关),而不是方法本身。

要验证这一点,您可以在 ILDASM 中打开程序集,然后单击 View->MetaInfo->Show!搜索060004DD和类似的东西Method #123 (060004DD)会出现在元数据中。该方法是此 appdomain 中第一个看到异常的方法。

P8 是该方法中失败指令的偏移量。

于 2013-04-02T12:10:07.067 回答