Scrittura nella finestra di output di Visual Studio


606

Sto cercando di scrivere un messaggio nella finestra di output per scopi di debug. Ho cercato una funzione come quella di Java system.out.println(""). Ho provato Debug.Write, Console.Writee Trace.Write. Non dà un errore, ma non stampa nulla.

Le opzioni "Definisci costante DEBUG" e "Definisci costante TRACE" sono selezionate.

Gli strumenti del menu → OpzioniDebug → L' opzione "Reindirizza tutto il testo della finestra di output sulla finestra immediata" non è selezionata.

Configurazione: attiva (debug)

Nota: ho creato un progetto con la procedura guidata come "Applicazione Windows Form", se pertinente. Non ho idea di dove cercare.


32
prova ad usareDebug.WriteLine()
Nikson Kanti Paul il

9
Poiché questo è un post precedente, lo aggiungerò come commento per coloro che si imbattono nella domanda. Invece di modificare effettivamente il codice, è anche possibile utilizzare breakpoint speciali chiamati tracepoint. Vedi la documentazione MSDN
Wonko the Sane,

13
Solo un promemoria che Debug.WriteLine () funzionerà solo durante l'esecuzione in Debug. Ciò significa eseguirlo con F5 e non CTRL-F5. Questo è facile da perdere.
kirk.burleson,

3
È vero, ma uno strumento utile è DebugView che mostra tutto l'output nel flusso di debug quando è in esecuzione al di fuori del debugger
the_mandrill

2
Se si sta tentando di scrivere l'output da un unit test in esecuzione nel framework di test di Visual Studio, le regole sono leggermente diverse, vedere questa risposta per i dettagli.
yoyo

Risposte:


754

Aggiungi lo System.Diagnosticsspazio dei nomi, quindi puoi utilizzare Debug.WriteLine()per stampare rapidamente un messaggio nella finestra di output dell'IDE. Per maggiori dettagli, fare riferimento a questi:


2
Grazie. Presumo che non ci sia modo di scrivere sull'output se inizio senza il debug (ctrl-f5) giusto?
previous_developer

1
Suppongo che tu stia cercando questo: stackoverflow.com/questions/562590/…
Bhargav Bhat,

Grazie ancora ma non ha funzionato per me. La traccia non viene stampata senza la modalità di debug anche se la costante TRACE è definita.
previous_developer

Ho appena eseguito una piccola app qui, funziona bene per me. Forse c'è un piccolo problema nel tuo ambiente?
Bhargav Bhat,

1
Questo è il mio codice di prova; pastebin.com/b7P0bYEa È abbastanza semplice ma ancora niente. Lo proverò su un altro sistema.
previous_developer

154

Questo scriverà nella finestra di output del debug:

using System.Diagnostics;

Debug.WriteLine("Send to debug output.");

6
Per me questa "uscita" alla finestra immediata
nuander

Ho provato questo su una serie di test unitari. Ho eseguito il debug del test selezionato, ma non c'era nulla di ciò che ho provato a stampare nella finestra di debug.
Frank H.

Questo fa output nella finestra Debug, tuttavia, solo dopo aver chiuso la pagina web. Vorrei una visualizzazione immediata quando eseguo il codice. Aspetta un minuto: ho scoperto che la finestra di output è nascosta mentre il codice è in esecuzione. Se visualizzo la finestra, il mio output è lì.
Joe Cotton,

Possiamo tenere un registro di questo messaggio che viene stampato nella finestra di debug? o visual studio fornisce un modo per accedere ai registri della finestra di debug ..?
Anmol Rathod,

82

Uso:

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

55
Debug.WriteLine

è quello che stai cercando.

In caso contrario, prova a fare questo:

Strumenti menu → OpzioniDebug → deseleziona Invia output a immediato .


1
Forse Debug.Write () non sta inserendo il ritorno a capo, quindi i messaggi vengono bufferizzati?
Guy Starbuck,

2
Non stavo vedendo il Debug.WriteLine ("String") fino a quando non ho fatto quello che ha detto Michea. Tools|Options|Debugging uncheck Send Output to Immediate
Skindeep2366,

3
Penso che nelle versioni successive la casella di controllo sia "Reindirizza tutto il testo della finestra di output su Finestra immediata"
Houdini Sutherland,

6
in VS 2015 si chiama: "Reindirizza tutto il testo della finestra di output alla finestra immediata", per ogni evenienza, alcuni hanno dovuto cercare 5 minuti per trovare l'impostazione appropriata :) - Stavo scorrendo su e giù per trovare un'opzione a partire da " Invia ... ":)
dba,

22

Per me, ha funzionato solo lo spazio dei nomi Trace e non quello di debug:

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

Sto lavorando a un progetto C # con Visual Studio 2010.


2
Sto usando VS 2013 Professional e sto tentando di ottenere output da un unit test usando il framework di unit test di Visual Studio. Sembra che il cablaggio di test acquisisca e reindirizzi Debug.WriteLine ma non Trace.WriteLine. E non vedrai nemmeno l'output di Trace a meno che non esegui il debug dei test (non solo eseguirli).
yoyo

15

Forse stai cercando

MessageBox.Show()

o

Debug.Writeline()

8
MessageBox.Show()può essere molto fastidioso quando si desidera scrivere più valori per scopi di debug.
Demenza,

4
La domanda era "Scrivere nella finestra di output di Visual Studio?" non in una finestra di messaggio.
Amir Touitou,

@AmirTwito Una finestra di messaggio è una finestra di output.
ProfK

4
Sì, hai ragione, ma la domanda era "Scrivere nella finestra di output di Visual Studio?" e non in una semplice finestra di messaggio che utilizza questo codice: MessageBox.Show ()
Amir Touitou,

4
@ProfK La finestra di output di Visual Studio è un elemento GUI molto specifico del programma specifico e MessageBox.Shownon vi scrive.
jpmc26

9

La chiamata

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

fallisce quando si lavora con .NET Core (V 1.0 o 1.1).

Dovremmo creare e usare un logger da Microsoft.Extensions.Logging, ma quel log appare solo nella finestra della console popup dotnet.exe, non nella finestra Output di Visual Studio.


Quindi Debug.WriteLine (), Console.WriteLine () e Trace.WriteLine () non stanno producendo nulla in Output per .Net Core? Un modo per utilizzare una sorta di registrazione semplice senza dover scrivere un Logclass? Ho cercato in Strumenti> Opzioni> Debug e selezionato "Mostra output da:" per possibili soluzioni.
Wouter Vanherck

4

Ciò richiede un framework di terze parti, vale a dire Serilog , ma ho comunque trovato un'esperienza molto fluida con l'output in un posto in cui posso vederlo.

Devi prima installare il sink di traccia di Serilog . Una volta installato, è necessario impostare il logger in questo modo:

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

(Puoi impostare un livello minimo diverso o impostarlo su un valore di configurazione o su una delle normali funzionalità di Serilog. Puoi anche impostare il Tracelogger su un livello specifico per sovrascrivere le configurazioni, o comunque tu voglia farlo.)

Quindi registri i messaggi normalmente e vengono visualizzati nella finestra Output:

Logger.Information("Did stuff!");

Questo non sembra un grosso problema, quindi lasciatemi spiegare alcuni vantaggi aggiuntivi. Il più grande per me è stato che potevo accedere contemporaneamente alla finestra Output e alla console :

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

Questo mi ha dato una grande flessibilità in termini di come ho consumato l'output, senza dover duplicare tutte le mie chiamate Console.Writecon Debug.Write. Quando scrivevo il codice, potevo eseguire il mio strumento da riga di comando in Visual Studio senza timore di perdere il mio output quando usciva. Quando l'ho distribuito e avevo bisogno di eseguire il debug di qualcosa (e non avevo Visual Studio disponibile), l'output della console era prontamente disponibile per il mio consumo. Gli stessi messaggi possono anche essere registrati in un file (o qualsiasi altro tipo di sink) quando è in esecuzione come attività pianificata.

La linea di fondo è che l'uso di Serilog per fare ciò ha reso davvero facile scaricare i messaggi su una moltitudine di destinazioni, assicurando che potessi sempre accedere prontamente all'output indipendentemente da come l'ho eseguito.

Richiede anche una configurazione e un codice molto minimi.


1
Serilog ora ha anche un sink di "debug" su github.com/serilog/serilog-sinks-debug che funziona in modo simile, ma ha una formattazione leggermente più bella :-) HTH!
Nicholas Blumhardt,

Perché non rendere un metodo .net pubblico (potrebbe essere statico) e mettere lì tutto ciò di cui hai bisogno come Console.Write o Debug.Write etc e usarlo ovunque?
Saulius,

@Saulius "Gli stessi messaggi possono anche essere registrati in un file (o qualsiasi altro tipo di sink) quando è in esecuzione come attività pianificata. La linea di fondo è che l'uso di Serilog per fare ciò ha reso davvero facile scaricare i messaggi su una moltitudine di destinazioni, assicurando che potessi sempre accedere prontamente all'output indipendentemente da come l'ho eseguito. "
jpmc26,

1

Questa non è una risposta alla domanda originale. Ma dal momento che ho trovato questa domanda durante la ricerca di un mezzo per scaricare interattivamente i dati degli oggetti, ho pensato che altri potrebbero trarre beneficio dal menzionare questa alternativa molto utile.

Alla fine ho usato la finestra di comando e ho inserito il Debug.Printcomando, come mostrato di seguito. Ciò ha stampato un oggetto memoria in un formato che può essere copiato come testo, che è tutto ciò di cui avevo veramente bisogno.

> Debug.Print <item>

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

0

Stampa nella finestra di output di Visual Studio:

Debug.Writeline();

0

Quanto segue ha funzionato per me in Visual Studio 2015:

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

Leggi la documentazione per OutputDebugStringW qui .

inserisci qui la descrizione dell'immagine Si noti che questo metodo funziona solo se si esegue il debug del codice ( debug mode)


11
Quello è C ++? La domanda è taggata c # .
jpmc26,

0

Ai fini del debug, il System.Diagnostics.Debug.Writeline()comando non verrà compilato nella versione di rilascio del codice a meno che non si disponga di listener di debug. Scrive a tutti i listener di traccia che includono la finestra di output VS durante l'esecuzione in modalità Debug.

Per un'applicazione console. Console.Writeline()avrebbe funzionato ma l'output sarebbe comunque generato nella versione di rilascio del tuo binario.

L'output di debug dovrebbe apparire anche nella normale finestra di output durante i test di debug; invece, l'output console.writeline no (ma può essere trovato nella finestra di output del test).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.