禁用调试输出

时间:2008-10-21 19:08:04

标签: c# .net debugging console

我想在我的代码中添加一些打印语句来显示我的位置并将重要值打印到控制台窗口。

我该怎么做,但是能够为发布版本关闭它?

6 个答案:

答案 0 :(得分:16)

切换到发布版本时,将删除对System.Diagnostics.Debug.Print()的所有来电。

答案 1 :(得分:4)

使用Log4net在发布中记录调试级别,并在生产中警告或出错。

这样做的好处是,如果您遇到无法在开发中重新创建的问题,可以在发布环境中重新开启日志记录。

[编辑] FWIW,我发现我现在使用测试驱动开发进行了 LOT 更少的调试日志记录。我的大多数日志都是警告/错误变种。

答案 2 :(得分:3)

查看System.Diagnostics.Debug和System.Diagnostics.Trace类。

答案 3 :(得分:1)

调试和跟踪是相关但不同的活动。 System.Diagnostics命名空间支持它们。

使用Debug.Write/WriteLine将调试消息写入日志文件。 (以及输出窗口。)使用Debug.Assert,几乎无处不在。如果您没有在代码中定义DEBUG符号,则在编译之前删除使用Debug类编写的所有代码 - 默认情况下,这将在调试和发布配置的选项中完成。

使用Trace.Write/WriteLine编写跟踪消息。这些方法在功能上等同于Debug类的方法;不同之处在于,如果您未在代码中定义TRACE符号,则会将其删除。

Debug和Trace类还有一个稍微麻烦的其他类的基础结构,比如TextWriterTraceListener,它允许你做一些漂亮的事情,例如将跟踪日志的输出从磁盘上的本地文件更改为只需编辑应用程序配置文件即可获得Web服务(或任何内容)。我最喜欢的技巧是实现一个TextWriter,它可以将文本写入TextBox,并使用它将所有调试和跟踪输出重定向到UI。

您还可以在应用配置文件中设置WriteIfWriteLineIf方法所尊重的标记,但根据我的经验,这些标记非常笨拙。

我发现一般来说,如果我构建自己的静态类来包装Trace方法,我会更高兴。这让我可以通过设置Trace类的属性来执行在UI中打开和关闭跟踪的事情。

最后:如果您需要检测应用程序,以便在每个方法开始和结束时执行跟踪操作,那么用于此的工具就是神奇的PostSharp。

答案 4 :(得分:0)

我使用:System.Console.WriteLine()

#if DEBUG
  System.Console.WriteLine("Message");
#endif 

答案 5 :(得分:0)

您还可以研究面向方面的编程解决方案。他们做的很好。将PostSharp视为一个很好的实现。他们的示例代码通常包含您正在寻找的确切示例。