有时我们会从错误的行号接收客户的堆栈跟踪。它不会经常发生,但有时它会困扰我们。
客户拥有带有优化和“仅pdb”调试信息的发布程序集。
是的,我们将行号与客户完全相同的代码版本进行比较。
是的,客户有正确的pdb文件。
不,行号中的这种差异无法用内联方法(编译器优化)来解释。
不,我们不使用任何AOP工具,如PostSharp。
任何想法为什么会发生?
答案 0 :(得分:7)
不是.net专家,但至少在其他语言中,当选择高编译器优化时,编译器可能会对代码进行重要的重新排序。这通常会使得将错误源固定到特定线路变得非常困难。如果编译器能够跨基本块进行优化,那么这种效果可能非常显着,将明显的行位置放在源文件的完全不同的部分。
答案 1 :(得分:2)
如果您使用大量的compil优化,编译器可能会移动您的部分代码。
调试的最佳方法是在客户端实际使用的dll上使用Reflector。使用堆栈跟踪的行号,您可以准确找到应用崩溃时调用的代码行。