我使用C#(使用VS IDE)进行开发。我对Debug / Trace语句感到困惑。
我们在何处以及为何使用这些陈述?
我经常在其他开发人员的源代码中看到这些。
有人可以提供指针吗?
答案 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的输出,需要跟踪侦听器。有一个默认的跟踪侦听器(不奇怪)DefaultTraceListener
。 DefaultTraceListener
将跟踪消息发送到共享内存(通过Win32 OutputDebugString
方法)。
好的,但是你怎么看这些跟踪消息?
最简单的方法是运行一个程序来为您读取信息。 DebugView是事实上的标准。几乎只是启动它并且消息开始出现。
您还可以使用TextWriterTraceListener
或EventLogTraceListener
将输出定向到其他位置。
您还可以通过配置添加跟踪侦听器:
<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),那么您可能希望查看使用它们的方法,因为它们几乎总是提供类似的条件日志记录功能。但是,它们可能无法提供与Assert
或WriteIf
类似的功能。