堆栈跟踪中的错误行号(发布)

时间:2009-09-14 07:25:39

标签: .net exception pdb-files

有时我们会从错误的行号接收客户的堆栈跟踪。它不会经常发生,但有时它会困扰我们。

客户拥有带有优化和“仅pdb”调试信息的发布程序集。

是的,我们将行号与客户完全相同的代码版本进行比较。

是的,客户有正确的pdb文件。

不,行号中的这种差异无法用内联方法(编译器优化)来解释。

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

任何想法为什么会发生?

2 个答案:

答案 0 :(得分:7)

不是.net专家,但至少在其他语言中,当选择高编译器优化时,编译器可能会对代码进行重要的重新排序。这通常会使得将错误源固定到特定线路变得非常困难。如果编译器能够跨基本块进行优化,那么这种效果可能非常显着,将明显的行位置放在源文件的完全不同的部分。

答案 1 :(得分:2)

如果您使用大量的compil优化,编译器可能会移动您的部分代码。

调试的最佳方法是在客户端实际使用的dll上使用Reflector。使用堆栈跟踪的行号,您可以准确找到应用崩溃时调用的代码行。