c# - Scrivere nella finestra di output di Visual Studio?


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

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

Menu StrumentiOpzioniDebug → L'opzione "Reindirizza tutto il testo della finestra di output nella 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 guardare.




Answers





Questo scriverà nella finestra di output di debug:

using System.Diagnostics;

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



Uso:

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



    Debug.WriteLine

è quello che stai cercando.

In caso contrario, prova a fare questo:

Menu StrumentiOpzioniDebug → deselezionare Invia output a immediato .




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

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

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




Forse stai cercando

MessageBox.Show()

o

Debug.Writeline()



La chiamata

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

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

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




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

Per prima cosa è necessario installare il lavandino Trace di Serilog. Una volta installato, è necessario configurare 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 qualsiasi delle normali funzionalità di Serilog. Puoi anche impostare il logger di Trace su un livello specifico per sovrascrivere le configurazioni, o comunque vuoi farlo.)

Quindi ti basta registrare i messaggi normalmente e vengono visualizzati nella finestra di output:

Logger.Information("Did stuff!");

Questo non sembra un grosso problema, quindi lasciatemi spiegare alcuni ulteriori vantaggi. Il più grande per me era 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 su Console.Write con Debug.Write . Quando scrivevo il codice, potevo eseguire il mio strumento da riga di comando in Visual Studio senza paura di perdere il mio output quando usciva. Quando l'ho distribuito e avevo bisogno di eseguire il debug di qualcosa (e non avevo a disposizione Visual Studio), l'output della console era prontamente disponibile per il mio consumo. Gli stessi messaggi possono anche essere registrati su un file (o qualsiasi altro tipo di sink) quando è in esecuzione come operazione pianificata.

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

Richiede anche un set up e un codice minimi.




Stampa nella finestra di output di Visual Studio:

Debug.Writeline();



Quanto segue ha funzionato per me in Visual Studio 2015 :

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

Leggi la documentazione di OutputDebugStringW qui .

Nota che questo metodo funziona solo se stai eseguendo il debug del tuo codice ( debug mode )




Questa non è una risposta alla domanda originale. Ma poiché ho trovato questa domanda quando cercavo un modo per scaricare in modo interattivo i dati oggetto, 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 comando Debug.Print , come mostrato di seguito. Questo ha stampato un oggetto di 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"