2011-10-28 16 views
12

Estoy ejecutando código en un microcontrolador con .NET Micro Framework, y quiero que mi salida de depuración escriba en un archivo de texto. ¿Como funciona esto?Escribir la salida de depuración de C# en el archivo .txt

+0

recomiendo que acaba de redirigir la salida a un archivo (por ejemplo your_app> registro.txt). Es mas flexible – m0skit0

+1

Si hablamos de flexibilidad, yo diría que use NLog. Solo que no tengo ni idea de cómo o de qué manera funcionaría en un sistema restringido ... @ m0skit0: ¿Hay un shell con el que hacer la redirección al usar .Net MF? –

+0

nlog's bueno también log4net [Editar] oops no estoy seguro de que esas sean opciones en .NET Micro ... – kenny

Respuesta

1

Usted tendrá que hacer algo como esto:

// 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(); 

Tomado de here.

Another related question

21

Uso Trace. Está diseñado para hacer lo que necesita.

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

Si solo desea rastrear a Console, entonces ConsoleTraceListener parece ser una solución más clara y directa. Pero él pidió escribir en un archivo. – Ucodia

+0

Acabo de actualizar mi respuesta, gracias por señalarme el problema. :) – Ekk

11

la solución más flexible para el uso de un trazado fuera de la caja es hacer un archivo de configuración de la aplicación que definirá escucha de seguimiento.

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

Luego, en su aplicación, cada vez que desee conectarse algo, sólo lo hacen:

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

Pero el poder de la clase TraceListener se encuentra en su granularidad. Puede elegir entre los niveles de Error, Información y Advertencia y definir diferentes archivos de registro para cualquier nivel que necesite rastrear. El uso de archivos de configuración hace que sea más fácil desactivar el rastreo en su aplicación porque no necesita volver a compilar su aplicación.

Para obtener más información sobre el sistema de seguimiento, consulte MSDN article.

+0

+1 Creo que respondes mi respuesta/pregunta tu solución debería funcionar en .NET Micro Framework. Todavía estoy usando debugview.exe. – JPBlanc

7

Ekk tiene razón acerca de que Trace es un mejor diseño, sin embargo, eso no responde a la pregunta, lo que estaría bien en ausencia de una solución directa. El OP o alguien puede haber heredado una base de código que usa Debug en todo momento, y Trace puede no ser deseable en ese momento.

He encontrado esta solución [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

¿Funcionará esto y liberará el archivo automáticamente y todo ese jazz? – Sinaesthetic

+0

Creo que autoflush se puede configurar en el archivo .config - '' - ver http://stackoverflow.com/questions/4345952/textwritertracelistener-does-not-work. También puede haber una 'propiedad AutoFlush 'estática en la clase' System.Diagnostics.Trace'. Personalmente, no me preocuparía el autoflushing. Normalmente, el rastreo maneja una gran cantidad de datos y, por lo tanto, se recomienda encarecidamente el uso del almacenamiento en memoria intermedia. Si se está centrando en la depuración de un área problemática, tal vez podría intentar mantener una referencia estática a 'oyentes' y llamar a' .Flush() 'en las líneas correspondientes. – Todd

+0

Rápido y fácil, como usted sugiere, no podemos controlar de ninguna manera la fuente que se va a desarrollar :) Dicho esto, esta solución activa una doble salida de impresión dentro del estudio visual.Pero gracias de todos modos – bonitzenator

Cuestiones relacionadas