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

本文关键字:运行时 不匹配 log4net DEBUG #if | 更新日期: 2023-09-27 18:15:40

当我使用像

这样的预处理器指令时
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(我现在正在使用这个解决方案),但我更愿意基于构建模式(调试/发布)而不是调试器是否附加运行代码。

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

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

不幸的是,我已经用调试器重构了我的(大型)项目。IsAttached和问题消失了,所以我(毫无根据,因为事实证明)怀疑预处理器指令是问题所在。也许.pdb没有与二进制文件同步。

既然我现在无法重现这个问题,我认为它已经解决了。很高兴知道这个场景是受支持的。谢谢罗斯·帕特森!