debug.writeline - 如何在调试时在调试中获取它,在实时获取文件

本文关键字:获取 调试 实时 文件 writeline debug | 更新日期: 2023-09-27 18:35:53

我即将上线一个 C# 项目,我正在努力解决一个简单的问题:如何将我的Debug.WriteLine("");转换为输出文件,当(并且仅当)它处于活动状态时?

做了什么:我把它添加到app.config

<system.diagnostics>
   <trace autoflush="true">
    <listeners>
      <add name="textListener"
           type="System.Diagnostics.TextWriterTraceListener"
           initializeData="trace.log" />
      <remove name="Default" />
    </listeners>
    </trace>
</system.diagnostics>

然后这个到我使用的一个bug.log类:

if (System.Diagnostics.Debugger.IsAttached)
{
    Debug.WriteLine(msg);
}
else
{
    Trace.WriteLine(msg);
}

如果它在调试器中(我想要的),我希望它会写入调试窗口,并在实时运行时写入输出文件('trace.log')(我想要的),但相反,这两个更改只是将所有内容都放在 trace 中.log无论如何。

如果我不是实时运行,而是使用 Visual Studio 中的[ > Start]按钮,如何设置它,以便在 Visual Studio(Microsoft Visual Studio Express 2013 for Windows Desktop)中的实时构建和output > debug窗口中获得trace.log

debug.writeline - 如何在调试时在调试中获取它,在实时获取文件

对于releasedebug配置,可以有两个不同的.config文件,并在发布配置中添加要跟踪到文件的新侦听器。若要管理多个配置文件,请查看 Scott Hanselman 文章使用预生成事件管理多个配置文件环境

如果您的意思是"实时"的"发布模式"而不是调试模式,那么:

#if DEBUG
Debug.WriteLine(msg);
#else
Trace.WriteLine(msg);
#endif

当然,您可以将 DEBUG 替换为预编译器中的实际调试常量。

保持简单:

Debug.WriteLine(msg);
Trace.WriteLine(msg);

您始终跟踪到日志。如果附加了调试器,则还会登录到调试器窗口。如果要查看调试器输出,请确保解决方案[ > Start]实际附加调试器。请参见如何:更改应用程序调试的启动操作