如何将 Stack Trace 中的行号与源代码匹配?

How do you match line numbers from a Stack Trace to source code?

我一直不太明白 Stack Trace 中的行号应该如何与原始源代码对齐。堆栈跟踪通常以

之类的结尾

C:\Path\Source.cs:第 123 行

但是,行号经常会相差很多。有谁知道如何将行号与原始源代码的行号正确匹配?

However, the line number is often off by quite a bit.

不,不是。如果是 - 您对源代码进行了更改。显然,行号是指已编译的源代码,而不是当前的。基本上:使用版本控制系统并为您的版本编号。他们确实在排队。

发布版本的堆栈跟踪可能与源代码不同,因为编译器可能会优化代码、删除行,甚至内联整个方法。在调试版本中,大多数优化都已关闭,堆栈跟踪应该更准确。

处理此问题的一种方法是在方法开始时验证参数并抛出适当的异常,并在消息中包含必要的详细信息以更好地了解问题出在哪里。

编辑: 还要检查 pdb 文件是否与源和 dll 匹配。 pdb 文件包含从 IL 代码到源代码的映射,因此堆栈跟踪中的行号是必需的。