2011-10-28 58 views
12

我正在微控制器上運行代碼.NET Micro Framework,我希望將調試輸出寫入文本文件。這個怎麼用?將C#調試輸出寫入.txt文件

+0

我建議你只是將輸出重定向到一個文件(例如your_app> log.txt中)。它更靈活。 – m0skit0

+1

如果我們說話靈活,我會說使用NLog。只是,我不知道它是如何以及以何種方式在受約束的系統上工作的...... @ m0skit0:使用.Net MF時是否有一個可用於重定向的shell? –

+0

nlog's good也是log4net [編輯] oops不確定這些是.NET Micro上的選項... – kenny

回答

1

你將不得不做這樣的事情:

// 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

21

使用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(); 
    } 
} 
+2

如果你只想追蹤到控制檯,那麼ConsoleTraceListener似乎是一個更清晰和更直接的解決方案。但他要求寫入一個文件。 – Ucodia

+0

我只是更新我的答案,謝謝指出我的問題。 :) – Ekk

11

使用外的現成一個跟蹤最靈活的解決方案是使一個應用程序配置文件,將定義跟蹤偵聽器。

<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

+0

+1我想你回答我的答案/問題解決方案應該在.NET Micro Framework中工作。我仍然在使用debugview.exe。 – JPBlanc

7

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"); 
+0

這會刷新和釋放文件自動和所有爵士樂? – Sinaesthetic

+0

我相信可以在.config文件中配置autoflush - '' - 參見http://stackoverflow.com/questions/4345952/textwritertracelistener-does-not-work。 System.Diagnostics.Trace類中也可能有一個靜態的'AutoFlush屬性'。我個人不會擔心自動刷新。通常,跟蹤處理大量數據,因此強烈建議進行性能緩衝。如果你專注於調試一個問題領域,也許你可以試着保留對'listeners'的靜態引用,並在相關的行上調用'.Flush()'。 – Todd

+0

快速簡單,正如你所建議的那樣,我們不能通過各種方式來控制要開發的源代碼:)也就是說,這種解決方案確實會在visual studio中觸發雙輸出打印。但是,無論如何感謝 – bonitzenator