跟踪与调试在 .NET BCL 中

本文关键字:BCL NET 调试 跟踪 | 更新日期: 2023-09-27 17:47:21

似乎

  • System.Diagnostics.Debug
  • System.Diagnostics.Trace

基本相同,但值得注意的例外是调试用法是在发布配置中编译出来的。

你什么时候会使用一个而不是另一个? 到目前为止,我挖出的唯一答案是您使用 Debug 类生成仅在调试配置中看到的输出,并且 Trace 将保留在发布配置中,但这并不能真正回答我脑海中的问题。

如果要检测代码,为什么要使用 Debug,因为无需重新编译即可关闭 Trace

跟踪与调试在 .NET BCL 中

主要区别在于您指出的区别:调试不包含在发布中,而跟踪包含在发布中。

据我了解,预期的区别在于,开发团队可能会使用 Debug 发出丰富的描述性消息,这些消息对于产品的使用者来说可能过于详细(或揭示),而 Trace 旨在发出更具体地面向检测应用程序的消息类型。

为了回答你的最后一个问题,我想不出使用调试来检测我打算发布的一段代码的理由。

希望这有帮助。

trace 和 debug 之间的唯一区别是,当程序编译为发布版本时,默认情况下会将跟踪语句包含在程序中,而 debug 语句则不包含。

因此,debug 类主要用于开发阶段的调试,而 trace 可用于应用程序编译和发布后的测试和优化

调试用于纯粹的调试目的。它在调试执行(调试模式)中发出丰富的消息。

跟踪有助于应用程序调试、错误修复和分析(发布后)。

调试类在发布模式下没有用。

跟踪和调试之间的完全区别:

调试和跟踪都使用 System.Diagnostics 命名空间。

调试

  • 它使用调试类。
  • 它在调试版本中使用。
  • 它使用应用程序开发的时间。
  • 调试模式下,编译器在可执行文件中插入一些调试代码。
  • 调试
  • 类仅在调试模式下工作。
  • 无法使用调试完成性能分析。
  • 调试用于查找程序中的错误。
  • 对于 Debug,
  • 我们可以使用 Debug.Write() 方法。
  • 调试在与主程序执行相同的线程中运行。

跟踪

  • 它使用 Trace 类。
  • 默认情况下,trace 语句包括程序编译成已发布版本的时间。
  • 跟踪类用于测试和优化,即使在编译和发布应用程序之后也是如此。
  • 跟踪类在调试模式和发布模式下都有效。
  • 跟踪在不同的线程中运行,形成主程序执行线程。
  • 对于 Trace,我们可以使用 Trace.Write() 方法。
  • 它使用应用程序部署的时间。

参考:C# 角

对于对性能敏感的高代码块,将 Trace 保留为编译但禁用可能会对性能产生影响。

我会考虑使用 log4net 进行跟踪,因为它的功能更加灵活和健壮。

但是对于真正的调试消息,我从不打算让除我或内部测试人员以外的任何人看到,我可能会坚持使用调试。

你已经回答了自己的问题。如果调试消息保留,人们可以看到它们。例如,假设您执行以下操作:

Debug.WriteLine("Connecting to DB with username: blah and PW: pass");

任何反编译代码的人都可以看到这一点。但这可能是您在测试期间了解的至关重要的事情。

跟踪是不同的。如果你要做Trace,我可能只使用log4net。