2009-09-14 65 views
7

有時,我們會收到來自客戶的堆棧跟蹤信息,其行號錯誤。它發生的並不是那麼頻繁,但有時它使我們困惑。堆棧跟蹤(版本)中的行號錯誤

客戶擁有帶有優化和「僅限pdb」調試信息的發佈程序集。

是的,我們將行號與客戶的完全相同版本的代碼進行比較。

是的,客戶有正確的pdb文件。

並且不,這種行號差異不能用方法內聯(編譯器優化)來解釋。

不,我們不使用任何AOP工具,如PostSharp。

任何想法爲什麼會發生?

+0

您是否正在使用PostSharp或類似的AOP工具? – 2009-09-14 07:27:46

+1

看看這個幫助或重複:http://stackoverflow.com/questions/492201/exception-error-message-with-incorrect-line-number – Kobi 2009-09-14 07:30:37

回答

7

不是.net專家,但至少在其他語言中,當選擇高編譯器優化時,編譯器可能會對代碼進行重要的重新排序。這可能而且往往確實很難將錯誤的根源固定在特定的行上。如果編譯器能夠跨基本塊進行優化,那麼這種影響可能非常顯着,將明顯的行位置放在源文件的完全不同的部分。

2

如果您使用大量的compil優化,編譯器可能會移動您的代碼的一部分,我猜。

最好的調試方法是在客戶端實際使用的dll上使用Reflector。使用stacktrace的行號,你會發現應用程序崩潰時確切地調用了哪些代碼行。

+1

如何反射器可以幫助我? 它不顯示行號,當然也不會保留格式。 反射器顯示代碼在發生異常的地方沒有顯着改變。 – xoposhiy 2009-09-14 19:30:11

+1

哦...所以你猜我搞砸了。對不起:/ – 2009-09-15 09:37:12