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

时间:2011-11-25 21:11:22

标签: c# logging c-preprocessor log4net preprocessor-directive

当我使用

之类的预处理程序指令时
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 个答案:

答案 0 :(得分:2)

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

不幸的是,我已经使用Debugger.IsAttached重构了我的(大型)项目,问题就消失了,所以我(毫无根据地说)怀疑预处理程序指令是个问题。也许.pdb与二进制文件不同步。

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

答案 1 :(得分:0)

我有同样的问题,但我没有看到预处理器指令,我看到这种情况发生在部分类中。想知道部分类是否是问题的原因。