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

问题描述 投票:0回答:1

我一直不明白堆栈跟踪中的行号是如何与原始源代码相匹配的。堆栈跟踪通常以类似于

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

但是,行号经常偏离不少。有谁知道如何正确地将行号与原始源代码的行号相匹配?

c# exception stack-trace
1个回答
1
投票

发布版的堆栈跟踪可能与源代码不同,因为编译器可能会优化代码,删除行,甚至内联整个方法。在调试版本中,大部分优化都被取消了,堆栈痕迹应该更准确。

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

edit:同时检查pdb文件是否与源文件和dlls匹配。pdb文件包含了从IL代码到源代码的映射,所以在堆栈跟踪中需要行号。


0
投票

但是,行号经常会有相当大的偏差。

不,它不是。如果是的话,那就是你对源代码进行了修改。显然,行号指的是编译后的源代码,而不是当前的源代码。基本上:使用一个版本控制系统,并对你的版本进行编号。它们确实是一致的。

© www.soinside.com 2019 - 2024. All rights reserved.