【发布时间】:2016-06-06 23:47:37
【问题描述】:
我遇到了一个问题,有人显然在我正在处理的 C# .NET 项目中禁用了 DEBUG 和 TRACE 常量,所以我对 Debug.WriteLine 的调用没有任何效果。 (输出中没有显示调试输出。)在重新启用它们as described here 后,我开始看到我的输出。
知道如何解决它很有帮助,但我的问题是为什么?据我了解,DEBUG 是一个编译时间常数,而Debug 类在我构建项目时已经编译好了。那么我对Debug.WriteLine 的呼叫是如何被跳过的?它们不应该像我的所有其他代码一样编译吗?
我能想到几种可能的方式:
- MS 在编译器中实现了一些特殊的“功能”来删除这些没有常量的调用
- Visual Studio 设置调试器,使其在运行时根据此项目设置监听或不监听调试输出
-
Debug有一些疯狂的代码检查调用程序集是否在编译时设置了某种标志
MS 的documentation 表示这是预期的行为,但我无法找到任何有关其实际工作原理的文档。当然,这也可能是我从未想过的事情。
那么它是如何工作的呢?
【问题讨论】:
标签: .net debugging compile-time-constant