【问题标题】:Writing C# debug output to .txt file将 C# 调试输出写入 .txt 文件
【发布时间】:2011-10-28 07:57:56
【问题描述】:

我正在使用.NET Micro Framework 在微控制器上运行代码,并且我希望将调试输出写入文本文件。这是如何工作的?

【问题讨论】:

  • 我建议您将输出重定向到一个文件(例如 your_app > log.txt)。它更灵活。
  • 如果我们谈论灵活,我会说使用 NLog。只是,我不知道它将如何或以何种方式在受限系统上工作......@m0skit0:在使用 .Net MF 时是否有一个外壳可以用来进行重定向?
  • nlog 也不错 log4net Edit 哎呀不确定这些是 .NET Micro 上的选项...

标签: c# microcontroller .net-micro-framework


【解决方案1】:

使用Trace。它旨在满足您的需求。

using System;
using System.Diagnostics;

class Test
{
    static void Main()
    {
       Trace.Listeners.Add(new TextWriterTraceListener("yourlog.log"));
       Trace.AutoFlush = true;
       Trace.Indent();
       Trace.WriteLine("Entering Main");
       Console.WriteLine("Hello World.");
       Trace.WriteLine("Exiting Main");
       Trace.Unindent();
       Trace.Flush();
    }
}

【讨论】:

  • 如果你只想追踪到Console,那么ConsoleTraceListener似乎是一个更清晰、更直接的解决方案。但他要求写入文件。
  • 我只是更新我的答案,感谢指出我的问题。 :)
【解决方案2】:

使用开箱即用的跟踪最灵活的解决方案是制作一个应用程序配置文件来定义跟踪侦听器。

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

然后,在您的应用程序中,只要您想记录某些内容,只需执行以下操作:

Trace.WriteLine("Hello, this is a trace");

但是 TraceListener 类的强大之处在于它的粒度。您可以在错误、信息和警告级别之间进行选择,并为您需要跟踪的任何级别定义不同的日志文件。使用配置文件还可以更轻松地在应用程序中禁用跟踪,因为您无需重新编译应用程序。

有关追踪系统的更多信息,请查看MSDN article

【讨论】:

  • +1 我想你回答了我的回答/问题,你的解决方案应该在 .NET Micro Framework 中工作。我仍在使用 debugview.exe。
【解决方案3】:

Ekk 认为 Trace 是一个更好的设计是正确的,但这并不能回答问题,如果没有直接的解决方案,这很好。 OP 或某人可能继承了始终使用 Debug 的代码库,而 Trace 在当时可能并不理想。

我找到了这个解决方案http://bytes.com/topic/c-sharp/answers/273066-redirect-output-debug-writeline

TextWriterTraceListener[] listeners = new TextWriterTraceListener[] {
new TextWriterTraceListener("C:\\debug.txt"),
new TextWriterTraceListener(Console.Out)
};

Debug.Listeners.AddRange(listeners);

Debug.WriteLine("Some Value", "Some Category");
Debug.WriteLine("Some Other Value");

【讨论】:

  • 这会自动刷新并释放文件吗?
  • 我相信 autoflush 可以在 .config 文件中配置 - &lt;trace autoflush="true"&gt; - 请参阅 stackoverflow.com/questions/4345952/…System.Diagnostics.Trace 类上也可能有一个静态的AutoFlush property。我个人不会担心自动冲洗。通常跟踪处理大量数据,因此强烈建议进行性能缓冲。如果您专注于调试问题区域,也许您可​​以尝试保持对listeners 的静态引用并在相关行上调用.Flush()
  • 按照您的建议,快速简单,我们不能完全控制要开发的源代码 :) 就是说,这种解决方案确实会触发 Visual Studio 内的双输出打印。不过还是谢谢
  • 记得在关闭应用程序之前刷新输出,否则会丢失流的最后几行
【解决方案4】:

你必须这样做:

// Set up listener
string filename = @"C:\listener.txt";
FileStream traceLog = new FileStream(filename, FileMode.OpenOrCreate);
TextWriterTraceListener listener = new TextWriterTraceListener(traceLog);

// Output to listener
listener.WriteLine("Trace message here");

// Flush any open output before termination.
// Maybe in an override of Form.OnClosed.
listener.Flush();

取自here

Another related question

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 2017-04-29
    • 1970-01-01
    • 2010-10-09
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多