¿Cuál es la diferencia entre Console.WriteLine () y Debug.WriteLine ()?

93

¿Cuál es la diferencia entre vs ?Console.WriteLine()Debug.WriteLine()

Zolomon
fuente

Respuestas:

106

Console.WriteLine escribe en el flujo de salida estándar, ya sea en depuración o versión. Debug.WriteLine escribe en los escuchas de seguimiento en la colección Listeners , pero solo cuando se ejecuta en depuración. Cuando la aplicación se compila en la configuración de la versión, los elementos Debug no se compilan en el código.

Como Debug.WriteLineescribe en todos los oyentes de seguimiento en la colección de oyentes , es posible que esto se genere en más de un lugar (ventana de salida de Visual Studio, consola, archivo de registro, aplicación de terceros que registra un oyente (creo que DebugView hace esto ), etc.).

Sam Holder
fuente
7
DebugView monitorea estrictamente los mensajes registrados a través de la llamada API nativa de Windows OutputDebugString(y DebugPrint). El DefaultTraceListenerescribe a OutputDebugString, por lo que DebugView ve la salida. msdn.microsoft.com/en-us/library/…
MarkJ
41

Console.WriteLine()está diseñado para programas en modo consola. Una buena característica del proceso de alojamiento de Visual Studio hace que su salida aparezca en la ventana Salida de Visual Studio mientras se depura para procesos que no tienen una consola. Eso es muy útil durante la depuración, pero tenga en cuenta que debe eliminar este código (o envolverlo con un #ifdef DEBUG) cuando esté listo para crear la versión de lanzamiento. De lo contrario, agregará una sobrecarga innecesaria a su programa. Esto lo hace menos que ideal para el seguimiento de depuración.

Debug.WriteLine()genera información de seguimiento si construye con el condicional DEBUG #defined. Que está activado de forma predeterminada en la versión Debug. Dónde termina la salida se puede configurar en el archivo app.exe.config. Si esta configuración no se anula, .NET proporciona automáticamente una instancia de la clase DefaultTraceListener. Envía el texto Debug.WriteLine () con la función API de Windows OutputDebugString () al depurador. El depurador de Visual Studio hace que aparezca en la ventana de salida, al igual que Console.WriteLine ().

Una clara ventaja de Debug.WriteLine () es que no genera gastos generales en la compilación de la versión, las llamadas se eliminan de manera efectiva. Sin embargo, no admite el formato compuesto, necesitará String.Format () para eso. Para el seguimiento de depuración, la clase Debug debe ser su elección.

Hans Passant
fuente
18

Si su propósito de usar Console.WriteLine es únicamente para depurar, es mejor que use Debug.WriteLine .

Si desea mostrar un mensaje a su usuario (en una aplicación de consola), debe usar Console.WriteLine .

Debug.WriteLine es solo con el propósito de depurar su aplicación. En el modo de lanzamiento, sus declaraciones de depuración serán ignoradas.

Otro uso de una aplicación de consola es probar ensamblados privados. En lugar del enfoque tradicional de crear algún tipo de arnés de prueba de GUI para probar la versión compilada de la DLL, simplemente puede volver a compilar la DLL como una aplicación de consola y entrada / salida desde / hacia la consola. He descubierto que esta técnica es más rápida que dedicar tiempo a crear un arnés de prueba de GUI.

Rohwedder
fuente
6
"Si desea mostrar un mensaje a su usuario, debe usar console.writeline". Esto podría confundir a algunas personas porque solo mostrará algo al usuario si se ejecuta en una aplicación de consola.
Matt Wilko