2009-07-21 14 views
119

El siguiente programa C# (creado con csc hello.cs) imprime solo Hello via Console! en la consola y Hello via OutputDebugString en la ventana DebugView. Sin embargo, no puedo ver ninguna de las llamadas System.Diagnostics.*. ¿Porqué es eso?¿Dónde aparece la salida System.Diagnostics.Debug.Write?

using System; 
using System.Runtime.InteropServices; 
class Hello { 
    [DllImport("kernel32.dll", CharSet=CharSet.Auto)] 
    public static extern void OutputDebugString(string message); 

    static void Main() { 
     Console.Write("Hello via Console!"); 
     System.Diagnostics.Debug.Write("Hello via Debug!"); 
     System.Diagnostics.Trace.Write("Hello via Trace!"); 
     OutputDebugString("Hello via OutputDebugString"); 
    } 
} 

¿Hay quizás algunos modificadores de línea de comandos especiales necesarios para csc?

No estoy usando Visual Studio para ninguno de mis desarrollos, esto es puro material de línea de comandos.

+0

como se ha mencionado en algún comentario en otra respuesta, se puede utilizar (SysInternals) DebugView de Microsoft: http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx –

Respuesta

62

Como han señalado otros, los oyentes deben registrarse para leer estos flujos. También tenga en cuenta que Debug.Write solo funcionará si se establece el indicador de compilación DEBUG, mientras que Trace.Write solo funcionará si se establece el indicador de compilación TRACE.

Ajuste de las banderas DEBUG y/o TRACE es fácil de hacer en las propiedades del proyecto en Visual Studio o mediante el suministro de los siguientes argumentos para Csc.exe

/define:DEBUG;TRACE

+3

Fue útil (no esperaba) que descubriera que los objetos Debug y Trace usan los mismos escuchas de rastreo, por lo tanto, tanto Debug.Write como Trace.Write salen al mismo lugar (s), es solo que Dependiendo de las condiciones en las que podrían no ejecutarse –

+0

, ¿podría explicar en qué * condiciones * se encuentran? exactamente qué situación un debug.Write no funcionará igual que un trace.write? – Pacerier

+2

esto no funciona, tengo indicadores de depuración y rastreo establecidos en contra de las propiedades del proyecto, y estoy usando Debug.WriteLine, la línea se ejecuta, pero no aparece nada en la ventana de salida, ¿alguien recibió algún otro consejo? – f1wade

7

Mientras depura en Visual Studio, muestra la ventana "Salida" (Ver -> Salida). Se mostrará allí.

mensajes
+1

Esta es una observación simple pero útil. – EleventhDoctor

39

Es necesario añadir un TraceListener para ver aparecer en la consola.

TextWriterTraceListener writer = new TextWriterTraceListener(System.Console.Out); 
Debug.Listeners.Add(writer); 

También aparecen en la ventana Visual Studio Output en el modo de depuración.

+1

¿Pero los oyentes muestran los resultados de OutputDebugString? –

+2

Aparentemente DebugView capturará tanto .NET Debug.Write() como Win32 OutputDebugString(): http://technet.microsoft.com/en-us/sysinternals/bb896647 – dlchambers

+0

@dlchambers: no creo que sea correcto. Esa página reclama la visualización de 'OutputDebugString()' y (kernel) 'DbgPrint().' –

97

Mientras se depura System.Diagnostics.Debug.WriteLine mostrará en la ventana de salida (Ctrl + Alt + O), puede También agregue un TraceListener a la colección Debug.Listeners para especificar Debug.WriteLine llamadas a la salida en otras ubicaciones.

Nota: Debug.WriteLine llamadas no pueden aparecer en la ventana de resultados si usted tiene la opción de Visual Studio "Redirigir todo el texto de la ventana de salida a la ventana Inmediato" marcada en el menú HerramientasOpcionesDepuraciónGeneral. Para mostrar " Herramientas → Opciones de depuración", marca la casilla junto a "Herramientas Opciones → Mostrar todos los ajustes".

+3

Me gustaría confirmar que (Ctrl + Alt + O) mostrará la ventana de salida mientras se depura en Visual Studio 2012 – Ishikawa

2

Cuando escribo debug.write ("") en el código, se imprime en la "ventana Inmediata", no en la "ventana de salida".

Puedes intentarlo. Para visualizar la ventana "Inmediato" (DepurarVentanaInmediato).

0

Para VB.NET se aplica lo siguiente. Debes seleccionar "Depurar" Y asegúrate de "Iniciar la depuración". Se puede llegar presionando F5.

También Console.WriteLine solo mostrará mensajes cuando se construya como "Versión" en su ventana de Salida.

Como se mencionó anteriormente, abra la ventana de salida con Ver → de salida y asegúrese de seleccionar "Build" si desea ver los mensajes Console.WriteLine o "depuración" si quieres ver Debug.WriteLine o mensajes Trace.WriteLine.

2

La solución para mi caso es:

  1. Haga clic derecho en la ventana de resultados;
  2. Compruebe el 'Programa de salida'
Cuestiones relacionadas