Sto eseguendo il codice su un microcontrollore con .NET Micro Framework e voglio che il mio output di debug scriva su un file di testo. Come funziona?Scrittura dell'output di debug C# in file .txt
risposta
Si dovrà fare qualcosa di simile:
// 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();
Tratto da here.
Usa Trace. È progettato per fare ciò di cui hai bisogno.
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();
}
}
La soluzione più flessibile per utilizzare un tracciato out-of-the-box è quello di rendere la configurazione di un'applicazione che definirà ascoltatori di traccia.
<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>
Poi, nella vostra applicazione, ogni volta che si desidera registrare qualcosa, basta fare:
Trace.WriteLine("Hello, this is a trace");
Ma il potere della classe TraceListener risiede nella sua granularità. È possibile scegliere tra i livelli Errore, Info e Avviso e definire un file di registro diverso per qualsiasi livello sia necessario tracciare. L'utilizzo dei file di configurazione rende inoltre più semplice disabilitare la traccia nell'applicazione perché non è necessario ricompilare l'applicazione.
Per ulteriori informazioni sul sistema di tracciamento, controllare questo MSDN article.
+1 Penso che tu risponda alla mia risposta/domanda che la soluzione dovrebbe funzionare in .NET Micro Framework. Sto ancora usando debugview.exe. – JPBlanc
Ekk ha ragione a proposito del fatto che Trace è un design migliore, tuttavia non risponde alla domanda, che andrebbe bene in assenza di una soluzione diretta. L'OP o qualcuno potrebbe aver ereditato una base di codice che utilizza Debug in tutto e Trace potrebbe non essere desiderabile al momento.
ho trovato questa soluzione [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");
Questo arriverà e rilascerà il file automaticamente e tutto quel jazz? – Sinaesthetic
Credo che l'autoflush possa essere configurato nel file .config - '
Semplice e veloce, come suggerito, non tutti i modi possono controllare la fonte da sviluppare :) Detto questo, questa soluzione fa scattare una stampa a doppia uscita all'interno di Visual Studio.Ma grazie comunque – bonitzenator
vi consiglio di appena reindirizzare l'output in un file (ad esempio your_app> log.txt). È più flessibile – m0skit0
Se stiamo parlando flessibile, direi usare NLog. Solo, non ho idea di come o in che modo avrebbe funzionato su un sistema vincolato ... @ m0skit0: C'è una shell con cui fare il reindirizzamento quando si usa .Net MF? –
nlog è buono anche log4net [Modifica] oops non è sicuro che quelle siano opzioni su .NET Micro ... – kenny