Console.WriteLine() 在发布期间写入啥? [复制]

Posted

技术标签:

【中文标题】Console.WriteLine() 在发布期间写入啥? [复制]【英文标题】:What does Console.WriteLine() write to during release? [duplicate]Console.WriteLine() 在发布期间写入什么? [复制] 【发布时间】:2013-06-20 07:21:53 【问题描述】:

所以我想知道,在运行常规的 winforms 应用程序时,Console.WriteLine() 方法会写入到哪里?

我知道在调试期间它会很高兴地在调试输出中吐出所有文本,但是当我不再像最终用户那样调试和使用程序时,一切都去哪里了?它会进入某种缓存吗? RAM的深度?去拉脱维亚度假?

如果它写入在运行时可访问的内容,我们能否以某种方式将其显示给用户或将所有内容写入文本文件或其他内容?

【问题讨论】:

我认为拉脱维亚是正确的答案 ;) 一个有趣的后续问题可能是:您能否附加到正在运行的进程的标准输出(用于记录目的)? 【参考方案1】:

你说的是 Console.WriteLine 还是 Debug.WriteLine?

Console.WriteLine 在调试和发布配置下的工作方式相同。如果您像控制台应用程序一样配置项目并以发布模式启动它,您将首先在后台获得一个控制台,您将在其中看到所有输出。

如果未定义 DEBUG,Debug.WriteLine 有一个条件语句。它不写任何东西。

【讨论】:

【参考方案2】:

我认为您的问题实际上是关于想要捕获Console.WriteLine()。首先,Console.WriteLine() 写入标准输出流,可以通过附加控制台窗口或通过其他截取流的方式读取。

如果您想捕获要使用的调试或日志记录信息

System.Diagnostics.Trace.WriteLine

然后,要将您的输出发送到一个文件,您可以设置一个TraceListener,它可以是一个文件或其他东西。

【讨论】:

这不一定是真的。无需使用控制台窗口即可从标准输出中读取。例如,它可以被使用Process.Start 运行它然后访问标准输入/输出的启动程序读取。 @Servy,好的,我已经更新了我的答案,希望更准确。【参考方案3】:

Console.WriteLine() 将在调试或发布模式下写入标准输出。所以你有办法在发布模式下捕捉它。

如果我记得的话,Debug.WriteLine 有一个替代方案,它没有在发行版中编译。

【讨论】:

以上是关于Console.WriteLine() 在发布期间写入啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

日常问题总结 一

在 Console.WriteLine 上使用三元运算符

Console.Writeline 对性能的影响

如何包含行号和文件名 Console.WriteLine 输出? [复制]

Debug.WriteLine() 与 Console.WriteLine() 处理文化的方式不同。为啥?

Console.WriteLine 不输出到 VS 2017 中的输出窗口