Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
有时我们会从客户那里收到带有错误行号的堆栈跟踪。这种情况并不经常发生,但有时会让我们感到困惑。
客户已发布具有优化和“仅 pdb”调试信息的程序集。
是的,我们将行号与客户拥有的完全相同的代码版本进行比较。
是的,客户有正确的 pdb 文件。
不,行号的这种差异不能用内联方法(编译器优化)来解释。
不,我们不使用任何 AOP 工具,例如 PostSharp。
任何想法为什么会发生?
不是.NET专家,但至少在其他语言中,选择高编译器优化时,编译器可以重新重新排序代码。这可以而且经常确实使得很难将错误的来源锁定到特定的行。如果编译器能够跨基本块进行优化,那么这种效果可能非常显着,将明显的行位置放在源文件的完全不同的部分。
如果您使用大量编译优化,我猜编译器可能会移动您的部分代码。
最好的调试方法是在客户端实际使用的 dll 上使用 Reflector。使用堆栈跟踪的行号,您将准确找到应用程序崩溃时调用的代码行。