2009-09-14 105 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