我对如何使用.NET Trace和Debug类感到困惑。

为什么要使用Trace而不是Debug?

Trace.TraceError()
Trace.TraceInformation()
Trace.Assert()

Debug.WriteLine()
Debug.Assert()

另外,我了解在Release配置模式下会忽略Debug语句,但如果trace语句一直适用,这对性能有何影响?

有帮助吗?

解决方案

在最简单的层面上,它们有不同的编译开关 - 即 Debug.WriteLine 等只有在你有 DEBUG 编译符号时才会切换(对于发布版本不常见) ,where-as Trace.WriteLine 通常包含在发布版本中。

Trace 路由具有可自定义的跟踪侦听器,可以通过配置进行检测; Debug 通常作为监听器进入调试器。当然,第三方跟踪系统提供了更大的灵活性。

其他提示

您可以使用编译器开关单独打开和关闭它们,如果您转到项目属性的构建页面,那么您有一些复选框。

我的经验法则是我使用debug来获取实际的调试信息,即此时变量x的值是......等,Trace用于通过我的应用程序追踪控制流(更像垃圾邮件)。

正如您所说,Trace调用仅在您处于发布模式时执行。在发布模式下进行编译具有您在最终应用程序中可能需要的一些性能优势,并且可能还有其他原因要您启用发布模式。但是,有时您可能希望将信息记录到跟踪控制台,可以使用 SysInternal的DbgView 。这些通常是您不一定要发送到日志输出的消息,或者您始终希望可用于调试目的的消息,即使用户已关闭日志记录也是如此。

您当然不希望向Trace控制台发送大量信息,因为它会对性能造成影响,但某些关键信息可能是合适的。

我倾向于使用Trace(带有相关的TraceSwitch)在发布环境中进行日志记录工作 - app.config的快速调整可以提供不同级别的日志记录,而无需重新编译(这可能会产生问题)无论如何都要离开)或需要附加调试器。对于仅出于任何原因仅出现在客户机器上的问题特别方便 - 我已经使用它来成功地从FTP类中退出日志(在旧的Framework 1.1天中)以帮助诊断两家公司之间的网络传输问题

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top