C# NET中的跟踪与调试

C# NET中的跟踪与调试,c#,.net,debugging,instrumentation,C#,.net,Debugging,Instrumentation,看来 ,及 在很大程度上是相同的,但值得注意的是,Debug用法是在发布配置中编译出来的 你什么时候用一个而不用另一个?到目前为止,我找到的唯一答案是使用Debug类生成只在调试配置中看到的输出,Trace将保留在发布配置中,但这并不能真正回答我头脑中的问题 如果您要插入代码,为什么要使用调试,因为跟踪可以在不重新编译的情况下关闭?我会考虑使用log4net进行跟踪,因为它的功能更加灵活和健壮 但对于真正的调试消息,除了我或内部测试人员之外,我不想让任何人看到,我可能会坚持使用调试。主要区

看来

  • ,及
在很大程度上是相同的,但值得注意的是,Debug用法是在发布配置中编译出来的

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


如果您要插入代码,为什么要使用调试,因为跟踪可以在不重新编译的情况下关闭?

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


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

主要区别在于您指出的一点:调试不包括在发行版中,而跟踪是

据我所知,预期的区别在于,开发团队可能会使用Debug来发出丰富的描述性消息,这些消息对于产品的消费者来说可能过于详细(或具有启发性),而Trace则旨在发出更专门用于检测应用程序的各种消息

为了回答您的最后一个问题,我想不出有什么理由使用Debug来检测我打算发布的代码


希望这能有所帮助。

您已经回答了自己的问题。如果调试消息保持不变,人们就可以看到它们。例如,假设您这样做:

Debug.WriteLine(“使用用户名blah和PW:pass连接到DB”);
任何反编译代码的人都可以看到这一点。但在测试过程中,这可能对您至关重要


痕迹是不同的。如果您要执行跟踪,我可能只使用log4net。

对于高性能敏感的代码块,保留在中编译但禁用的跟踪可能会产生性能差异

跟踪和调试之间的唯一区别是,在编译到发布版本时,跟踪语句默认包含在程序中,而调试语句则不包含


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

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

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


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

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

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

调试

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

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

参考资料:

我完全不同意这个答案。跟踪级别低于调试级别,不应在生产中使用。根据我的经验,跟踪是在方法开始时使用的,或者在一项工作通过工作流时“跟踪”它,并且在某些方面显示调用堆栈。以上所有内容,包括信息,都应该是生产中使用的唯一级别。这就是信息、警告、错误、致命。跟踪应该在生产中使用。Windows的每个子系统都包含跟踪代码,这一点非常重要。每个硬盘搜索、每个内存分配、每个中断、CPU上下文切换、每个线程调度都有跟踪代码。Windows平台事件跟踪(ETW)是一个非常轻量级的跟踪系统,任何人都可以在任何Windows PC上随时启用。是将跟踪事件发送到ETW的托管方式。@VincePanuccio我相信您讨论的是实际的日志记录级别,而这个问题讨论的是System.Diagnostics命名空间中的调试和跟踪类。你认为每个日志级别的优先级不同是对的。事实上,我最近(4年后)对跟踪有不同的看法,这与@Jared给出的答案更为一致。再看一看我与之共事过的不同团队是如何使用Trace的,这是一个非常有用的工具。MSDN提供了一些关于跟踪类的重要信息,这些信息来自于“我完全不同意”:)Microsofts关于的文档帮助我更好地理解了这些差异。这完全取决于跟踪编译常量的存在,这是调试和发布的默认设置。这完全取决于编译常量TRACE和Debug。@VincePanuccio默认生成设置是什么,因为Debug和TRACE将按此答案所示使用。是的,您可以更改跟踪和调试常量以获得不同的行为,但这并不是这两个类的设计目的。关于哪个loggin框架更可取的问题表明log4net并不比其他的更灵活或更健壮。