Escribir en la ventana de salida de Visual Studio

607

Estoy tratando de escribir un mensaje en la ventana de salida para fines de depuración. Busqué una función como la de Java system.out.println(""). Probé Debug.Write, Console.Writey Trace.Write. No da un error, pero tampoco imprime nada.

Las opciones "Definir constante DEPURACIÓN" y "Definir constante TRACE" están marcadas.

Herramientas de menú → OpcionesDepuración"Redirigir todo el texto de la ventana de salida a la ventana Inmediato" no está marcada.

Configuración: activa (depuración)

Nota: Creé un proyecto con el asistente como "Aplicación de formularios Windows Forms" si es relevante. No tengo idea de dónde mirar.

anterior_desarrollador
fuente
32
tratar de usarDebug.WriteLine()
Nikson Kanti Paul
99
Como esta es una publicación anterior, agregaré esto como un comentario para aquellos que tropiezan con la pregunta. En lugar de cambiar realmente el código, también puede usar puntos de interrupción especiales llamados puntos de rastreo. Ver documentación de MSDN
Wonko the Sane
13
Solo un recordatorio de que Debug.WriteLine () solo funcionará cuando se ejecute en Debug. Eso significa ejecutarlo con F5 y no con CTRL-F5. Esto es fácil de perder.
kirk.burleson
3
Eso es cierto, pero una herramienta útil es DebugView que muestra todos los resultados de la secuencia de depuración cuando se ejecuta fuera del depurador
the_mandrill
2
Si está intentando escribir la salida de una prueba unitaria que se ejecuta en el marco de prueba de Visual Studio, las reglas son un poco diferentes, consulte esta respuesta para obtener más detalles.
yoyo

Respuestas:

754

Agregue el System.Diagnosticsespacio de nombres y luego puede usar Debug.WriteLine()para imprimir rápidamente un mensaje en la ventana de salida del IDE. Para más detalles, consulte estos:

Bhargav Bhat
fuente
2
Gracias. Supongo que no hay forma de escribir en la salida si empiezo sin depurar (ctrl-f5) ¿verdad?
previous_developer
1
Supongo que estás buscando esto: stackoverflow.com/questions/562590/…
Bhargav Bhat
Gracias de nuevo pero eso no me funcionó. La traza no se imprime sin el modo de depuración, incluso si la constante TRACE está definida.
previous_developer
Acabo de ejecutar una pequeña aplicación aquí, funciona bien para mí. ¿Quizás hay un pequeño problema técnico en su entorno?
Bhargav Bhat
1
Este es mi código de prueba; pastebin.com/b7P0bYEa Es bastante simple pero todavía nada. Lo intentaré en otro sistema.
previous_developer
154

Esto escribirá en la ventana de salida de depuración:

using System.Diagnostics;

Debug.WriteLine("Send to debug output.");
veight
fuente
66
Para mí esto "
sale
Intenté esto en un conjunto de pruebas unitarias. Depuré la prueba seleccionada, pero no había nada de lo que intenté imprimir en la ventana de depuración.
Frank H.
Sin embargo, esto se muestra en la ventana de depuración solo después de cerrar la página web. Me gustaría una visualización inmediata cuando ejecuto el código. Espere un minuto: descubrí que la ventana de salida está oculta mientras se ejecuta el código. Si visualizo la ventana, mi salida está allí.
Joe Cotton
¿Podemos mantener un registro de este mensaje que se imprime en la ventana de depuración? ¿O Visual Studio proporciona alguna forma de acceder a los registros de la ventana de depuración?
Anmol Rathod
82

Utilizar:

System.Diagnostics.Debug.WriteLine("your message here");
Luqman
fuente
55
Debug.WriteLine

es lo que estás buscando

Si no, intente hacer esto:

Herramientas del menú → OpcionesDepuración → desmarque Enviar salida a Inmediato .

Micah Armantrout
fuente
1
Posiblemente Debug.Write () no está insertando el retorno de carro, por lo que los mensajes se almacenan en el búfer.
Guy Starbuck
2
No estaba viendo Debug.WriteLine ("String") hasta después de hacer lo que dijo Micah. Tools|Options|Debugging uncheck Send Output to Immediate
Skindeep2366
3
Creo que en las versiones posteriores la casilla de verificación es "Redirigir todo el texto de la ventana de salida a la ventana inmediata"
Houdini Sutherland
66
en VS 2015 se llama: "Redirigir todo el texto de la ventana de salida a la ventana Inmediato", por si acaso, algunos tuvieron que buscar durante 5 minutos para encontrar la configuración apropiada :) - Estaba desplazándome hacia arriba y hacia abajo para encontrar una opción a partir de " Enviar ... ":)
dba
22

Para mí, solo funcionó el espacio de nombres Trace y no el Debug:

System.Diagnostics.Trace.WriteLine("message");

Estoy trabajando en un proyecto de C # en Visual Studio 2010.

Zac
fuente
2
Estoy usando VS 2013 Professional e intento obtener resultados de una prueba de unidad usando el marco de prueba de unidad de Visual Studio. Parece que el arnés de prueba captura y redirige Debug.WriteLine pero no Trace.WriteLine. Y tampoco verá la salida de Trace a menos que depure las pruebas (no solo las ejecute).
yoyo
15

Usted puede estar buscando

MessageBox.Show()

o

Debug.Writeline()
dansasu11
fuente
8
MessageBox.Show()puede ser muy molesto cuando desea escribir múltiples valores para fines de depuración.
Demencial
44
La pregunta era "¿Escribir en la ventana de salida de Visual Studio?" No a un cuadro de mensaje.
Amir Touitou
@AmirTwito Un cuadro de mensaje es una ventana de salida.
ProfK
44
Sí, tiene razón, pero la pregunta era "¿Escribir en la ventana de salida de Visual Studio?" y no a un cuadro de mensaje simple usando este código: MessageBox.Show ()
Amir Touitou
44
@ProfK La ventana de salida de Visual Studio es un elemento GUI muy específico del programa específico y MessageBox.Showno escribe en él.
jpmc26
9

La llamada

System.Diagnostics.Debug.WriteLine("message");

falla al trabajar con .NET Core (V 1.0 o 1.1).

Se supone que debemos crear y usar un registrador desde Microsoft.Extensions.Logging, pero ese registro solo aparece en la ventana de la consola emergente dotnet.exe, no en la ventana Salida de Visual Studio.

Paul Gorbas
fuente
Entonces, ¿Debug.WriteLine (), Console.WriteLine () y Trace.WriteLine () no generan nada en Output para .Net Core? ¿Alguna forma de utilizar algún tipo de registro simple sin tener que escribir una Logclass? Busqué en Herramientas> Opciones> Depuración y comprobé "Mostrar salida de:" para encontrar posibles soluciones.
Wouter Vanherck
4

Esto requiere un marco de terceros, a saber, Serilog , pero no obstante, he encontrado que es una experiencia muy fluida para obtener resultados en algún lugar donde pueda verlo.

Primero debe instalar el fregadero Trace de Serilog . Una vez instalado, debe configurar el registrador de esta manera:

Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Trace()
    .CreateLogger();

(Puede establecer un nivel mínimo diferente o establecerlo en un valor de configuración o cualquiera de las funciones normales de Serilog. También puede establecer el Traceregistrador en un nivel específico para anular las configuraciones, o como quiera hacer esto).

Luego, simplemente registra los mensajes normalmente y aparecen en su ventana de Salida:

Logger.Information("Did stuff!");

Esto no parece ser un gran problema, así que permítanme explicar algunas ventajas adicionales. El más importante para mí fue que podía iniciar sesión simultáneamente en la ventana Salida y en la consola :

Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Trace()
    .WriteTo.Console(standardErrorFromLevel: LogEventLevel.Error)
    .CreateLogger();

Esto me dio una gran flexibilidad en términos de cómo consumí de salida, sin tener que duplicar todas mis llamadas a Console.Writecon Debug.Write. Al escribir el código, podía ejecutar mi herramienta de línea de comandos en Visual Studio sin temor a perder mi salida cuando salía. Cuando lo implementé y necesité depurar algo (y no tenía Visual Studio disponible), la salida de la consola estaba disponible para mi consumo. Los mismos mensajes también se pueden registrar en un archivo (o cualquier otro tipo de sumidero) cuando se ejecuta como una tarea programada.

La conclusión es que usar Serilog para hacer esto hizo que sea realmente fácil volcar mensajes a una multitud de destinos, asegurando que siempre pueda acceder fácilmente a la salida independientemente de cómo lo ejecuté.

También requiere una configuración y un código muy mínimos.

jpmc26
fuente
1
Serilog ahora también tiene un sumidero de "depuración" en github.com/serilog/serilog-sinks-debug que funciona de manera similar, pero tiene un formato ligeramente más agradable :-) HTH!
Nicholas Blumhardt
¿Por qué no hacer un método .net público (puede ser estático) y poner todo lo que necesita, como Console.Write o Debug.Write, etc. y usarlo en todas partes?
Saulius
@Saulius "Los mismos mensajes también se pueden registrar en un archivo (o cualquier otro tipo de sumidero) cuando se ejecuta como una tarea programada. La conclusión es que usar Serilog para hacer esto hizo que sea realmente fácil volcar mensajes en una multitud de destinos, asegurando que siempre pueda acceder fácilmente a la salida, independientemente de cómo lo ejecuté ".
jpmc26
1

Esta no es una respuesta a la pregunta original. Pero dado que encontré esta pregunta cuando buscaba un medio para descargar interactivamente datos de objetos, pensé que otros podrían beneficiarse al mencionar esta alternativa muy útil.

Finalmente utilicé la ventana de comandos e ingresé el Debug.Printcomando, como se muestra a continuación. Esto imprimió un objeto de memoria en un formato que se puede copiar como texto, que es todo lo que realmente necesitaba.

> Debug.Print <item>

  id: 1
  idt: null
  igad: 99
  igbd: 99
  gl_desc: "New #20"
  te_num: "1-001-001-020"
djabraham
fuente
0

Imprima en la ventana de salida de Visual Studio:

Debug.Writeline();
Amir Touitou
fuente
0

Lo siguiente funcionó para mí en Visual Studio 2015:

OutputDebugStringW(L"Write this to Output window in VS14.");

Lea la documentación de OutputDebugStringW aquí .

ingrese la descripción de la imagen aquí Tenga en cuenta que este método solo funciona si está depurando su código ( debug mode)

Mona Jalal
fuente
11
¿Eso es C ++? La pregunta está etiquetada c # .
jpmc26
0

Para fines de depuración, el System.Diagnostics.Debug.Writeline()comando no se compilará en la versión de lanzamiento de su código a menos que tenga escuchas de depuración. Escribe a todos los oyentes de rastreo que incluye la ventana de salida VS cuando se ejecuta en modo de depuración.

Para una aplicación de consola. Console.Writeline()funcionaría pero la salida aún se generaría en la versión de lanzamiento de su binario.

La salida de depuración también debe aparecer en la ventana de salida normal al depurar las pruebas; mientras que la salida de console.writeline no (pero se puede encontrar en la ventana de salida de prueba).

Chris McCowan
fuente