【问题标题】:Mapping an IL dump back to the source code leveraging the CLR20R3 information利用 CLR20R3 信息将 IL 转储映射回源代码
【发布时间】: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

【问题讨论】:

    标签: c# asp.net .net exception


    【解决方案1】:

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

    由于P87d,您应该在IBM.WMQ.MQTCPConnection.SendData 中查看IL_007d - 与您使用第二个sn-p 的方法相同。

    【讨论】:

      【解决方案2】:

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

      要验证这一点,您可以在 ILDASM 中打开程序集,然后单击查看->元信息->显示! 搜索060004DD,类似Method #123 (060004DD) 的内容将出现在元数据中。该方法是此 appdomain 中第一个发现异常的方法。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-05
        • 2022-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多