我们在哪里使用Debug / Trace语句

时间:2009-08-02 05:10:58

标签: c#

我使用C#(使用VS IDE)进行开发。我对Debug / Trace语句感到困惑。

我们在何处以及为何使用这些陈述?

我经常在其他开发人员的源代码中看到这些。

有人可以提供指针吗?

2 个答案:

答案 0 :(得分:20)

调试语句仅存在于Debug版本中。

跟踪语句存在于Debug和Release版本中。

将Debug和Trace语句放在要输出某些值的位置,以便进行调试或检查。

此MS支持文章可能很有用:How to trace and debug in Visual C#

  

Trace类将消息路由到   监听器:设计的类   接受跟踪消息并发送它们   到适当的输出设备。该   Trace.Listeners集合包含一个   听众列表   在系统注册。调用   任何Trace输出方法都会   向所有人发送消息   注册听众。一个叫做的课   DebugTraceListener是自动的   添加到Listeners集合中,和   将消息路由到   OutputDebugString Win32 API函数。

SysInternals DebugView应用程序将捕获通过OutputDebugString定向的任何输出。

答案 1 :(得分:19)

Debug和Trace都用于输出除应用程序的正常错误记录之外的其他消息。输出是由程序员决定的。可编写的典型事项包括方法入口/出口,方法参数值,方法返回值,正在使用的配置信息,关键性能计时等。

Debug和Trace之间的主要区别在于,发布版本中存在Trace,而Debug不存在。我发现Trace更有用,因为它允许您获得有关应用程序在生产环境中运行的其他信息(假设您添加了Trace以开始)。添加跟踪消息时要考虑的一件事是,如果出现棘手的生产问题,请考虑您希望访问的信息。

Debug和Trace都是有条件编译的。 Debug(默认情况下)编译为调试版本,而Trace(默认情况下)编译为版本版本。条件编译由编译标志(对于Trace:/ d:TRACE)或预处理器指令(对于Trace:#define TRACE)确定。

好处是这些语句可以在开发过程中受益,但可以通过更改编译标志轻松删除生产版本。

<强>输出

要获取Trace的输出,需要跟踪侦听器。有一个默认的跟踪侦听器(不奇怪)DefaultTraceListenerDefaultTraceListener将跟踪消息发送到共享内存(通过Win32 OutputDebugString方法)。

好的,但是你怎么看这些跟踪消息?

最简单的方法是运行一个程序来为您读取信息。 DebugView是事实上的标准。几乎只是启动它并且消息开始出现。

您还可以使用TextWriterTraceListenerEventLogTraceListener将输出定向到其他位置。

您还可以通过配置添加跟踪侦听器:

<configuration>
  <system.diagnostics>
    <trace autoflush="false" indentsize="4">
      <listeners>
        <add name="myListener"type="System.Diagnostics.TextWriterTraceListener"initializeData="TextWriterOutput.log" />
        <remove name="Default" />
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>


如果您已经在使用日志记录提供程序(例如Enterprise Library,log4net),那么您可能希望查看使用它们的方法,因为它们几乎总是提供类似的条件日志记录功能。但是,它们可能无法提供与AssertWriteIf类似的功能。