2010-06-10 634 views

回答

76

Console.WriteLine写入标准输出流,无论是在调试或发布。 Debug.WriteLine写入Listeners集合中的跟踪侦听器,但仅在调试时运行。当应用程序在发布配置中编译时,Debug元素将不会被编译到代码中。

至于Debug.WriteLine写入Listeners集合中的所有跟踪监听器,它是可能的,这可能是在多个地方输出(Visual Studio的输出窗口,控制台,日志文件的第三方应用程序,注册一个监听器(我相信DebugView这样做)等)。

+7

严格地说,DebugView监视通过本地Windows API调用'OutputDebugString'(和'DebugPrint')记录的消息。 'DefaultTraceListener'写入'OutputDebugString',这就是DebugView看到输出的原因。 http://msdn.microsoft.com/en-us/library/system.diagnostics.defaulttracelistener.aspx – MarkJ 2010-06-10 12:05:51

27

Console.WriteLine()是用于控制台模式程序。 Visual Studio托管过程的一个很好的功能使其输出出现在Visual Studio输出窗口中,同时调试没有控制台的进程。这在调试时非常有用,但要注意,当您准备创建发布版本时,应该删除此代码(或将其包含在#ifdef DEBUG中)。否则会给你的程序增加不必要的开销。这使得它不太适合调试跟踪。

Debug.WriteLine()如果使用条件#defined创建DEBUG,则会生成跟踪信息。在Debug版本中默认处于打开状态。输出结束的位置可以在app.exe.config文件中配置。如果这个配置没有被覆盖,.NET会自动提供一个DefaultTraceListener类的实例。它将Debug.WriteLine()文本与Windows OutputDebugString() API函数一起发送给调试器。 Visual Studio调试器使其显示在输出窗口中,就像Console.WriteLine()一样。

Debug.WriteLine()的一个明显的优点是它在Release版本中不产生任何开销,这些调用被有效地移除。但是它不支持复合格式,因此您需要String.Format()。对于调试跟踪,Debug类应该是您的选择。

14

如果您的使用Console.WriteLine的目的仅仅是为了调试,您的 更好地使用Debug.WriteLine

如果您想向用户显示消息,您可以使用Console.WriteLine

Debug.WriteLine仅用于调试您的应用程序。在 发布模式下,您的调试语句将被忽略。

控制台应用程序的另一个用法是测试私人程序集。而不是创建某种GUI测试工具来测试DLL的编译版本的传统方法,您可以简单地重新构建DLL作为控制台应用程序以及从控制台输入/输出。我发现这种技术比花费时间创建GUI测试工具更快。

+2

“如果你想向用户显示一条消息,你可以使用console.writeline。“这可能会让一些人感到困惑,因为如果在控制台应用程序中执行,它只会向用户显示某些内容。 – 2011-05-03 15:19:46

相关问题