2010-03-30 9 views
85

Quando si esegue un'applicazione console in Java con Eclipse, vedo l'output inserito in una casella di testo nell'IDE stesso, invece di avere una console spuntata come in Visual Studio. Questo è utile, poiché anche dopo che il programma è stato terminato, posso ancora fare buon uso del testo che è stato scritto al suo interno, poiché non viene cancellato finché non lo eseguo di nuovo. È possibile ottenere qualcosa di simile con Visual Studio? So che invece di fareAvere l'output di un'applicazione console in Visual Studio anziché la console

System.Console.WriteLine(str); 

posso fare

System.Diagnostics.Debug.WriteLine(str); 

ma non è proprio la stessa cosa, come si ottiene un sacco di "spazzatura" nella finestra di output, come tutta la carica simboli e così via.

Ancora meglio, è possibile avere tutto fatto nell'IDE stesso, quando si esegue l'applicazione, invece di far funzionare la console?

+0

Quale versione di VS stai usando? – Gabe

+0

Visual Studio 2010 RC –

+0

Si dispone di un riquadro Risultati test? – Gabe

risposta

30

Nella finestra di dialogo Opzioni di Visual Studio -> Debug -> Controllare il "Reindirizza tutto il testo della finestra di output nella finestra immediata".

+52

Ho selezionato questa casella di controllo, ma ricevo comunque un popup della console e nulla nella finestra "Output" (Debug, Test, Build, ..) o "Finestra immediata". – GuiSim

+3

Non funziona affatto per me, esattamente lo stesso risultato di prima – EvenLisle

+5

@EvenLisle è necessario modificare il tipo di applicazione in Applicazione Windows come in [risposta di stolsvik] (http://stackoverflow.com/a/9615237/834521). In ogni caso, l'opzione menzionata in questa risposta era per impostazione predefinita. – TooTone

4

Usa System.Diagnostics.Trace

seconda di ciò che gli ascoltatori si attribuiscono, output di analisi può andare alla finestra di debug, la console, un file, database o tutti in una volta. Le possibilità sono letteralmente infinite, in quanto l'implementazione del proprio TraceListener è estremamente semplice.

+0

Sì, ma quello che voglio sapere è se è possibile farlo, senza doverlo implementare da solo. –

+0

@devoured La classe Trace restituisce solo la finestra di debug per impostazione predefinita. Devi solo aggiungere ascoltatori extra (e ce ne sono molti già scritti che puoi usare) se vuoi vedere anche l'output altrove. –

+1

Sono passato alla finestra di dialogo Debug Options e ho scelto "Redirect all Output Window text to the Immediate Window" per fare in modo che l'output Trace andasse nella finestra Immediata in modo che non venga confuso con il debug. – Gabe

2

È possibile creare un'applicazione wrapper da eseguire anziché eseguire direttamente la propria app reale. L'applicazione wrapper può ascoltare stdout e reindirizzare tutto su Trace. Quindi modifica le impostazioni di esecuzione per avviare il wrapper e passare il percorso all'app reale da eseguire.

Si potrebbe anche avere il wrapper che collega automaticamente il debugger al nuovo processo se un debugger è collegato al wrapper.

33

Nel Visual Studio Finestra di dialogo Opzioni -> Debug -> Controllare il "Reindirizza tutto il testo della finestra di output nella finestra immediata". Quindi vai alle impostazioni del progetto e cambia il tipo da "Applicazione console" a "Applicazione Windows". A quel punto Visual Studio non apre più una finestra della console e l'output viene reindirizzato alla finestra Output in Visual Studio. Tuttavia, non puoi fare nulla di "creativo", come richiedere chiavi o input di testo, o svuotare la console: otterrai eccezioni di runtime.

+13

Trovo questo particolarmente maldestro. Cosa, mi chiedo, è la logica alla base di questo in VS? Dovrebbe essere la capacità di tutti i moderni IDE di avere un pannello all'interno dell'IDE stesso come console per l'input e l'output. (graffia la testa) –

+5

La domanda afferma chiaramente per _ "l'applicazione console" _ e la modifica in qualcos'altro solo per scopi di debug, dove non posso nemmeno "Console.ReadKey()" è semplicemente ridicolo! – MickyD

0

So che questa è solo un'altra risposta, ma ho pensato di scrivere qualcosa per i nuovi sviluppatori Web, che potrebbero confondersi con la parte "Modifica in un'applicazione Windows", perché penso che un'applicazione MVC sia predefinita in Visual Studio 2013 il valore predefinito è un tipo di output di libreria di classi.

La mia Applicazione Web di default è impostata come un tipo di uscita di "Libreria di classi". Non devi cambiarlo. Tutto quello che dovevo fare era seguire i suggerimenti di andare a Strumenti> Opzioni> Debug> Reindirizza tutto il testo della finestra di output alla finestra immediata. Ho quindi utilizzato il suggerimento System.Diagnostics.Trace di Joel Coehoorn sopra.

0

Invece, è possibile raccogliere l'output in un risultato del test.

Non è possibile fornire input, ma è possibile fornire facilmente diversi test con diversi argomenti della riga di comando, ogni test che raccoglie l'output.

Se il tuo obiettivo è il debug, questo è un modo poco impegnativo di offrire uno scenario di debug ripetibile.

namespace Commandline.Test 
{ 
    using Microsoft.VisualStudio.TestTools.UnitTesting; 

    [TestClass] 
    public class CommandlineTests 
    { 
     [TestMethod] 
     public void RunNoArguments() 
     { 
      Commandline.Program.Main(new string[0]); 
     } 
    } 
} 
1

Assicurarsi che il controllo "reindirizzare tutti d'uscita ..." checkbox nella ricerca degli errori finestre di impostazione:

Make sure the check the "**Redirect All Output...**" checkbox in the debugging setting windows:

+7

ciò che è divertente è stato suggerito circa 7 anni fa su questa domanda, non ha funzionato e quindi non funziona ora :) –

Problemi correlati