#if(DEBUG) 和 log4net 行号源码/运行时不匹配问题

5
当我使用预处理指令时,例如
1 #if(DEBUG)
2 // 1
3 // 2
4 #else
5 // 1
6 // 2
7 #endif
8
9 logger.Debug("Log exception, etc."); 

这会导致运行时日志中的行号(例如堆栈跟踪)不正确 - 在上面的示例中,第9行将变为第4行,因为其余部分将由预处理器解析。

这使得日志分析非常困难。

有没有一种方法可以解决这个问题而不需要创建带有ConditionalAttribute的方法?

我知道Debugger.IsAttached(现在正在使用此解决方案),但我更喜欢根据构建模式(调试/发布)而不是调试器是否已连接来运行代码。


2
我经常这样编写C#代码,当我使用logger.Debug("Exception:" + exception)时,异常跟踪中的行号会正确显示,与原始源文件匹配。我怀疑其他地方出了问题。请给我们一个真正的例子,而不是像这样实际上不会引发异常的例子。 - Ross Patterson
我在一个完全独立的项目中再次检查,你是正确的,异常跟踪是正确的。不幸的是,我已经使用了Debugger.IsAttached重构了我的(大型)项目,并且问题消失了,所以我(毫无根据地)怀疑预处理器指令是问题所在。也许.pdb与二进制文件不同步。由于我现在无法再现该问题,因此我认为它已解决。感谢您的评论。很高兴知道支持这种情况。 - surfen
3
请复制您的评论并将其作为答案,然后接受它。 - LarsTech
1个回答

2

我在一个完全独立的项目中再次检查,正如Ross Patterson所建议的那样,异常跟踪是正确的。

不幸的是,我已经使用了"Debugger.IsAttached"重构了我的(大型)项目,并且问题消失了,因此我(毫无根据地)怀疑预处理指令是问题所在。也许“.pdb”与二进制文件不同步。

由于我现在无法再现这个问题,我认为它已经解决了。很高兴知道这种情况得到了支持。感谢Ross Patterson


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接