2013-04-02 35 views
0

在運行的ASP.NET應用程序中出現CLR20R3錯誤。最後我知道我需要抓住這個錯誤 - 顯然 - 但這是我在PROD中解決這個問題後所要做的維護任務。我不能直接進入維護任務的原因是因爲它需要花費過多的工作和時間才能使這些更改在所有較低環境中進行測試和批准,然後才能進入PROD。利用CLR20R3信息將IL轉儲映射回源代碼

錯誤指出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 postP8的值是偏移量或違規行,並且不會例外。例外情況表示P8的值爲7d

回答

1

leave.s IL_0055沒有提及調用方法。 P7值表示錯誤發生在IBM.WMQ.MQTCPConnection.SendData之內,所以你需要在那裏尋找(不是在調用它的方法中)。

由於P87d,你應該在IBM.WMQ.MQTCPConnection.SendData在看IL_007d - 你採取了第二個片段的方法相同。

1

P7指發生異常的方法標記。因此,崩潰在IBM.WMQ.MQTCPConnection::SendData之內,因爲很明顯,這是與4DD令牌相對應的方法。你發現的只是對該方法的調用(可能與問題無關),而不是方法本身。

要驗證這一點,您可以在ILDASM中打開程序集,然後單擊查看 - >元信息 - >顯示! 搜索060004DD和類似Method #123 (060004DD)的東西會出現在元數據中。該方法是此AppDomain中第一個看到異常的方法。

P8是該方法內失敗指令的偏移量。