看起来System.Diagnostics.Debug
和System.Diagnostics.Trace
在很大程度上是相同的,唯一的例外是在发布配置中编译时会省略Debug使用。
什么情况下使用一个而不是另一个?到目前为止,我找到的唯一答案就是你使用Debug类来生成只在调试配置中才能看到的输出,而Trace将保留在发布配置中,但这并没有真正回答我脑海中的问题。
如果你要插入代码,为什么还要使用Debug,因为可以在不重新编译的情况下关闭Trace?
看起来System.Diagnostics.Debug
和System.Diagnostics.Trace
在很大程度上是相同的,唯一的例外是在发布配置中编译时会省略Debug使用。
什么情况下使用一个而不是另一个?到目前为止,我找到的唯一答案就是你使用Debug类来生成只在调试配置中才能看到的输出,而Trace将保留在发布配置中,但这并没有真正回答我脑海中的问题。
如果你要插入代码,为什么还要使用Debug,因为可以在不重新编译的情况下关闭Trace?
主要区别就是你所指出的:Debug不包含在发布版中,而Trace则包含在其中。
据我理解,其预期的差异是,开发团队可以使用Debug来发出丰富、描述性的消息,这些消息可能对产品的消费者来说过于详细(或揭示太多细节),而Trace旨在发出更具体针对应用程序进行仪器化的消息。
回答你最后一个问题,我想不出为什么要使用Debug来调试一段我打算发布的代码。
希望这能有所帮助。
trace和debug的唯一区别在于,当程序编译成发布版本时,默认情况下会包括trace语句,而不包括debug语句。
因此,在开发阶段,debug类主要用于调试,而在应用程序编译和发布后,可以使用trace进行测试和优化。
调试(Debug)用于纯调试目的。它在调试执行(debug mode)中发出丰富的消息。
跟踪(Trace)有助于应用程序调试、错误修复和分析(发布后)。
Debug类在发布模式下没有用处。
Trace和Debug的完全区别:
Trace和Debug都使用System.Diagnostics命名空间。
Debug
- 它使用Debug类。
- 它用于调试构建。
- 它用于应用程序开发的时间。
- 在Debug模式下,编译器会将一些调试代码插入可执行文件中。
- Debug类仅在Debug模式下工作。
- 无法使用Debug进行性能分析。
- 调试用于查找程序中的错误。
- 我们可以使用Debug.Write()方法进行调试。
- Debug在与主程序执行相同的线程中运行。
Trace
- 它使用Trace类。
- 默认情况下,当程序编译为发布版本时,会包括Trace语句。
- 即使在应用程序编译和发布后,Trace类也用于测试和优化。
- Trace类在Debug模式和release模式下均可使用。
- Trace在与主程序执行线程不同的线程中运行。
- 我们可以使用Trace.Write()方法进行跟踪。
- 它使用应用程序部署的时间。
参考:C# Corner
对于高性能敏感的代码块,保留但禁用 Trace 可能会带来性能差异。
我会考虑使用log4net进行跟踪,因为它的功能更加灵活和强大。
但是对于真正的调试消息,我永远不打算让其他人看到,只有我或内部测试人员才能看到,我可能会坚持使用Debug。
你已经回答了自己的问题。如果调试信息保留在代码中,其他人就可以看到它们。例如,假设你执行以下操作:
Debug.WriteLine("Connecting to DB with username: blah and PW: pass");
任何反编译您的代码的人都能看到这一点。但在测试期间,这可能是您非常重要需要知道的事情。
Trace 是不同的。如果你打算使用 Trace,我会倾向于使用 log4net。