Hai visto l'output della console in Visual Studio 2010?


163

Sto scrivendo un semplice programma C # con alcune uscite ( Console.WriteLine("...");). Il problema è che, ogni volta che lo eseguo, non riesco a vedere l'output del programma nella finestra di output.

Il tag "output programma" è già stato verificato e ho già reindirizzato tutti gli output alla finestra intermedia ma senza risultati.

Come abilito a vedere l'output del programma?

Non penso che il problema risieda nel mio codice. Ho provato a eseguire un semplice programma che emette solo una stringa e legge "ala hello world" e non riesco ancora a vedere alcun output. Il problema è con me che cerco l'output nella posizione sbagliata o che Visual Studio agisce.

Inoltre, il debug.writemetodo non funziona.

Usando debug.Write, funziona tutto, anche se non prima. O qualcosa che mi ha infastidito prima di ricominciare o ho solo bisogno di fare una pausa, in entrambi i casi ora va tutto bene. Grazie a tutti per i commenti utili =)


7
Visual Studio copre la finestra della console. Spostalo sull'altro monitor.
Hans Passant,

Risposte:


195

È possibile utilizzare il metodo System.Diagnostics.Debug.Writeo System.Runtime.InteropServicesper scrivere messaggi nella finestra di output.


10
System.Diagnostics.Debug.Write (nel caso in cui l'OP non abbia lo spazio dei nomi in gioco)
jonsca

4
Ah vero, sono abituato a colpire control + period :)
Richard Adnams,

jonsca: ho uno spazio dei nomi in gioco e perché posso semplicemente usare console.writeline, voglio che il mio programma scriva sulla console non solo per motivi di test ??
r3x

2
Se l'applicazione è un'applicazione console, è possibile utilizzare console.writeline per stampare sulla finestra della console o se l'applicazione è un'app Windows Form, è possibile utilizzare debug.write. Controlla questo link per ulteriori informazioni social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/…
Richard Adnams

1
interessante non lo sapevo, e sì, la mia app è un'app di Windows Form, ma no, ho provato a usare il debug. Scrivere lo stesso problema con il metodo, si compila e tutto è peachy ma non riesco a vedere l'output da nessuna parte
r3x

50

Ecco un paio di cose da controllare:

  1. Per console.Write/WriteLine, l'app deve essere un'applicazione console. (fai clic con il pulsante destro del mouse sul progetto in Esplora soluzioni, scegli Proprietà e osserva la combinazione " Tipo di output " nella scheda Applicazione - dovrebbe essere " Applicazione console " (nota, se hai davvero bisogno di un'applicazione Windows o di una libreria di classi, don cambiarlo in app console solo per ottenere il Console.WriteLine).

  2. È possibile utilizzare System.Diagnostics.Debug.WriteLineper scrivere nella finestra di output (per mostrare la finestra di output in VS, arrivare a Visualizza | Output ) Si noti che queste scritture si verificano solo in una build in cui è definito il condizionale DEBUG (per impostazione predefinita, le build di debug lo definiscono e le versioni di rilascio no)

  3. È possibile utilizzare System.Diagnostics.Trace.Writelinese si desidera poter scrivere su "listener" configurabili in build non di debug. (per impostazione predefinita, questo scrive nella finestra di output in Visual Studio, proprio come Debug.Writeline)


2
Non stavo vedendo il mio output, ma poi mi sono reso conto che dovevo eseguire il programma in modalità debug (F5) invece di Ctrl + Shift + F5. Grazie!
Travis Heeter,

System.Diagnostics.Trace.Writeline non sembra funzionare, c'è qualcos'altro che devo configurare per questo?
Travis Heeter,

1
«1» - dichiarazione falsa. Mono mostra l'ammenda fine per tutte le applicazioni. «2» - ofc. Il problema è che il metodo non emette anche sul terminale. Quindi non è possibile eseguire il debug di un'app sul PC senza un IDE.
Ciao Angelo

34

Aggiungi Console.Read();a alla fine del programma. Manterrà la chiusura dell'applicazione e potrai vederne l'output in quel modo.

Questa è un'applicazione console che ho appena estratto che si interrompe dopo l'elaborazione ma prima di uscire:

class Program
{
    static void Main(string[] args)
    {
        DummyObjectList dol = new DummyObjectList(2);
        dol.Add(new DummyObject("test1", (Decimal)25.36));
        dol.Add(new DummyObject("test2", (Decimal)0.698));
        XmlSerializer dolxs = new XmlSerializer(typeof(DummyObjectList));
        dolxs.Serialize(Console.Out, dol);

        Console.WriteLine(string.Empty);
        Console.WriteLine(string.Empty);

        List<DummyObject> dolist = new List<DummyObject>(2);
        dolist.Add(new DummyObject("test1", (Decimal)25.36));
        dolist.Add(new DummyObject("test2", (Decimal)0.698));
        XmlSerializer dolistxs = new XmlSerializer(typeof(List<DummyObject>));
        dolistxs.Serialize(Console.Out, dolist);
        Console.Read(); //  <--- Right here
    }
}

In alternativa, puoi semplicemente aggiungere un punto di interruzione sull'ultima riga.


2
Console.ReadLine funziona anche devi solo premere invio per continuare dove Read prende qualsiasi chiave standard.
Richard Adnams,

è un'app di Windows Form, e il metodo debug.write né console.writeline sembra funzionare
r3x

Euhm, perché stai inviando alla console da un'app di Windows Form? Suggerisco invece di inviare un modulo o una dialgbox. O crea un'app per console ...
Vincent Vancalbergh,

sì, che mi è già stato segnalato, è solo uno stupido errore da parte mia, grazie ancora per l'heads up =)
r3x

Console.Read () fa in modo che la finestra della console venga messa a fuoco e quindi venga visualizzata davanti a VS. Se si inserisce semplicemente un punto di interruzione dopo Console.Write (), la finestra della console mostrerà il proprio output ma non ha lo stato attivo, quindi potrebbe non essere visibile.
Nigel

21

Premere Ctrl+ F5per eseguire il programma anziché F5.


1
Ctrl + F5 avvia l'applicazione senza eseguire il debug e non vedrai nulla nella finestra di output.
Richard Adnams,

6
Questo ha funzionato per me; Volevo solo vedere che cosa stava uscendo il programma, nessuno dei risultati della console stava mostrando. Ciò ha causato il mantenimento della finestra della console dopo l'esecuzione, in modo da poter vedere l'output.
davenpcj,

+1, questo è quello, se in realtà non si desidera eseguire il debug (mostra la console e consente di leggere l'output).
mlvljr,

8

System.Diagnostics.Debug.WriteLine()funzionerà, ma devi cercare nel posto giusto per l'output. In Visual Studio 2010, nella barra dei menu, fare clic su Debug -> Windows -> Output . Ora, nella parte inferiore dello schermo ancorato accanto all'elenco degli errori, dovrebbe essere presente una scheda di output. Fare clic e ricontrollare che mostra l'output dal flusso di debug nell'elenco a discesa.

PS: Penso che la finestra di output sia visualizzata su una nuova installazione, ma non ricordo. In caso contrario, o se lo hai chiuso per sbaglio, segui queste istruzioni.


0

Per mantenere aperta la console di Windows e non utilizzare altri metodi di output anziché lo stream di output standard, vai su Nome del progetto -> Proprietà -> Linker -> Sistema.

Una volta lì, selezionare la scheda Sottosistema e selezionare Console (/ SOTTOSISTEMA: CONSOLLE). Una volta fatto questo, ogni volta che vuoi compilare usa Ctrl + F5 (Avvia senza debug) e la tua console rimarrà aperta. :)


Penso che sia applicabile a C ++, non a C # come nella domanda.
Dmitry Fedorkov,

0

Mi imbatto spesso in questo per qualche motivo, e non riesco a capire perché questa soluzione non sia stata menzionata:

Fai clic su VisualizzaOutput (o semplicemente tieni premutoCtrl e premi W> O)

Output della console appare allora dove i tuoi Elenco errori , gente del posto , e orologi finestre sono.

Nota: sto usando Visual Studio 2015.


La finestra Output che citi sembra essere generata dal debugger poiché ha molte linee relative al caricamento degli assembly, all'avvio e all'arresto dei thread eccetera. Questo è diverso dall'output della console.
PeterVermont,

0

Visual Studio copre da solo la finestra della console, prova a ridurre a icona la finestra di Visual Studio in cui sono disegnati l'uno sull'altro.


-1

In Program.cs, tra:

static int Main(string[] agrs)
{

e il resto del codice, aggiungi:

#if DEBUG
    int rtn = Main2(args);
    Console.WriteLine("return " + rtn);
    Console.WriteLine("ENTER to continue.");
    Console.Read();
    return rtn;
}

static int Main2(string[] args)
{
#endif

Aggiungi una descrizione, come il tuo codice risolve il problema.
Koopakiller

-4

È possibile creare 2 piccoli metodi, uno che può essere chiamato all'inizio del programma, l'altro alla fine. È inoltre possibile utilizzare Console.Read (), in modo che il programma non si chiuda dopo l'ultima riga di scrittura.

In questo modo è possibile determinare quando viene eseguita la funzionalità e anche quando esiste il programma.

startProgram()
{
     Console.WriteLine("-------Program starts--------");
     Console.Read();
}


endProgram()
{
    Console.WriteLine("-------Program Ends--------");
    Console.Read();
}

Non vedo come questa risposta porti nuove informazioni alla domanda poiché la possibilità Console.Read () è già stata dichiarata in precedenza.
ForceMagic,
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.