【发布时间】:2020-10-09 20:01:26
【问题描述】:
Console.WriteLine() 与 Debug.WriteLine() 有什么区别?
【问题讨论】:
Console.WriteLine() 与 Debug.WriteLine() 有什么区别?
【问题讨论】:
Console.WriteLine 在调试或发布时写入标准输出流。 Debug.WriteLine 写入Listeners 集合中的跟踪侦听器,但仅在调试中运行时。在发布配置中编译应用程序时,Debug 元素不会被编译到代码中。
当Debug.WriteLine 写入Listeners 集合中的所有跟踪侦听器时,这可能会在多个位置输出(Visual Studio 输出窗口、控制台、日志文件、注册的第三方应用程序)一个听众(我相信DebugView 会这样做)等)。
【讨论】:
OutputDebugString(和 DebugPrint)记录的消息。 DefaultTraceListener 写入 OutputDebugString,这就是 DebugView 看到输出的原因。 msdn.microsoft.com/en-us/library/…
Console.WriteLine() 用于控制台模式程序。 Visual Studio 托管进程的一个不错的功能是在调试没有控制台的进程时,它的输出会出现在 Visual Studio 输出窗口中。这在调试时非常有用,但请注意,当您准备好创建发布版本时,您应该删除此代码(或用#ifdef DEBUG 包装它)。否则它将给您的程序增加不必要的开销。这使得它不太适合调试跟踪。
Debug.WriteLine() 如果您使用 DEBUG 条件 #defined 构建,则会生成跟踪信息。在调试版本中默认启用。可以在 app.exe.config 文件中配置输出结束的位置。如果未覆盖此配置,.NET 会自动提供 DefaultTraceListener 类的实例。它将带有 Windows OutputDebugString() API 函数的 Debug.WriteLine() 文本发送到调试器。 Visual Studio 调试器使它出现在输出窗口中,就像 Console.WriteLine() 一样。
Debug.WriteLine() 的一个明显优势是它不会在 Release 构建中产生开销,调用被有效地删除。但是,它不支持复合格式,您需要 String.Format() 。对于调试跟踪,应该选择 Debug 类。
【讨论】:
如果您使用 Console.WriteLine 的目的仅仅是为了调试,您 最好使用Debug.WriteLine。
如果您想向用户显示消息(在控制台应用程序中),您可以使用Console.WriteLine。
Debug.WriteLine 仅用于调试您的应用程序。在 您的调试语句将被忽略的发布模式。
控制台应用程序的另一个用途是测试私有程序集。与创建某种 GUI 测试工具来测试 DLL 的编译版本的传统方法不同,您可以简单地将 DLL 重新构建为控制台应用程序并从控制台输入/输出。我发现这种技术比花时间创建 GUI 测试工具要快。
【讨论】: