7

有时我们会从客户那里收到带有错误行号的堆栈跟踪。这种情况并不经常发生,但有时会让我们感到困惑。

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

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

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

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

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

任何想法为什么会发生?

4

2 回答 2

7

不是.NET专家,但至少在其他语言中,选择高编译器优化时,编译器可以重新重新排序代码。这可以而且经常确实使得很难将错误的来源锁定到特定的行。如果编译器能够跨基本块进行优化,那么这种效果可能非常显着,将明显的行位置放在源文件的完全不同的部分。

于 2009-09-14T07:29:29.230 回答
2

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

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

于 2009-09-14T07:37:01.520 回答