【发布时间】:2013-04-02 11:48:42
【问题描述】:
我在正在运行的 ASP.NET 应用程序中收到 CLR20R3 错误。而且我知道最后我需要捕捉到这个错误 - 很明显 - 但这是我在 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
但是,我很难证明这就是它所指的东西,因为 Hans 声明 in this post P8 值是偏移量或违规行,这不会与例外一起发生。异常表示P8 的值为7d。
【问题讨论】: