He creado un oyente de depuración para redirigir la salida de la ventana de depuración/consola a un archivo (con una pila de llamadas), usando el siguiente código:problema redirigir la salida de depuración en un archivo mediante escucha de seguimiento
void SomeMethod()
{
// Create a file for output .txt.
Stream debugFile = File.Create(fileName);
// create TextWriterTraceListener named "file"
TextWriterTraceListener debugWriter = new TextWriterTraceListener(debugFile, "file");
// add to debug listeners
Debug.Listeners.Add(debugWriter);
// set callstack to be shown
Debug.Listeners["file"].TraceOutputOptions |= TraceOptions.Callstack;
// set auto-flush
Debug.AutoFlush = true;
}
pero la salida no redirigirá al archivo que especifiqué, siempre está vacío.
Llamo esto desde el constructor en mi formulario principal. ¿El lugar donde lo llamo es un problema?
Lo que estoy tratando de lograr aquí es tener las excepciones a la ventana de resultados de depuración colocado en un archivo con una pila de llamadas, para que pueda encontrarlos y corregirlos.
ACTUALIZACIÓN: Después de algunas investigaciones que llegó a la conclusión de que la adición de un nuevo TraceListener
a la colección de depuración Listeners
no redirige la salida de la depuración/consola. En realidad, solo responde a los métodos Write
, WriteLine
etc. al igual que el escucha predeterminado. El problema persiste: ¿Cómo capturar el resultado de la ventana Depuración/Consola y cómo obtener el seguimiento de la pila de las excepciones que aparecen allí?
¿Alguien tiene alguna idea?
¿Estás seguro de que deberías agregar a Debug.Listeners? Calling Console.WriteLine y Debug.WriteLine producen diferentes comportamientos. Si está agregando un Listener a Debug, pero llamando a Console, podría causar el problema que está informando. – JustLoren
@JustLoren - No estoy seguro de a qué se refiere exactamente. Lo que estoy tratando de hacer aquí es tener el mismo resultado que tengo en la ventana de la consola de depuración en Visual Studio para un archivo, pero con una pila de llamadas para cada excepción que allí ocurra. – TheBoyan
Debería intentar escribir manualmente en su oyente Debug llamando a su función para configurarlo, y luego llamar a Debug.WriteLine ("Debugger Initialized"); Eso debería verificar que todo esté funcionando. Si solo está confiando en el marco, no puede estar seguro de qué secuencia está escuchando en realidad la ventana de salida. – JustLoren