Anzeigen der Konsolenausgabe in Visual Studio 2010?

163

Ich schreibe ein einfaches C # -Programm mit einigen Ausgaben ( Console.WriteLine("...");). Das Problem ist, dass ich jedes Mal, wenn ich es ausführe, die Ausgabe des Programms im Ausgabefenster nicht sehen kann.

Das Tag "Programmausgabe" ist bereits aktiviert, und ich habe bereits alle Ausgaben in das Zwischenfenster umgeleitet, jedoch ohne Erfolg.

Wie aktiviere ich die Anzeige der Programmausgabe?

Ich glaube nicht, dass das Problem in meinem Code liegt. Ich habe versucht, ein einfaches Programm auszuführen, das nur einen String und eine Readline "ala hello world" ausgibt, und ich kann immer noch keine Ausgabe sehen. Das Problem ist entweder, dass ich nach der Ausgabe am falschen Ort suche oder dass Visual Studio ausspielt.

Die debug.writeMethode funktioniert auch nicht.

Mit debug.Writefunktioniert alles, obwohl es vorher nicht war. Entweder ist etwas mit mir ausgefallen, bevor ich neu gestartet habe, oder ich muss nur eine Pause machen, so oder so ist jetzt alles gut. Vielen Dank für die hilfreichen Kommentare =)

r3x
quelle
7
Visual Studio deckt Ihr Konsolenfenster ab. Bewegen Sie es auf Ihren anderen Monitor.
Hans Passant

Antworten:

195

Mit der Methode System.Diagnostics.Debug.Writeoder können Sie System.Runtime.InteropServicesNachrichten in das Ausgabefenster schreiben.

Richard Adnams
quelle
10
System.Diagnostics.Debug.Write (falls das OP den Namespace nicht im Spiel hat)
jonsca
4
Ah wahr, ich bin es einfach gewohnt, Kontrolle + Periode zu treffen :)
Richard Adnams
jonsca: ich habe einen namespace im spiel und warum kann ich nur console.writeline verwenden, ich möchte, dass mein programm nicht nur aus testgründen auf die konsole schreibt?
r3x
2
Wenn Ihre Anwendung eine Konsolenanwendung ist, können Sie mit console.writeline im Konsolenfenster drucken, oder wenn Ihre Anwendung eine Windows Form-App ist, können Sie debug.write verwenden. Überprüfen Sie diesen Link für weitere Informationen social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/…
Richard Adnams
1
interessant wusste das nicht, und ja, meine App ist eine Windows-Form-App, aber nein, ich habe versucht, mit Debug.Write-Methode das gleiche Problem, es kompiliert und alles ist pfirsichfarben, aber ich kann die Ausgabe nirgendwo sehen
r3x
50

Hier sind einige Dinge zu überprüfen:

  1. Für console.Write/WriteLinemuss Ihre Anwendung eine Konsolenanwendung sein. (Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, wählen Sie Eigenschaften und sehen Sie sich die Kombination " Ausgabetyp " auf der Registerkarte " Anwendung " an - sollte " Konsolenanwendung " sein (Hinweis: Wenn Sie wirklich eine Windows-Anwendung oder eine Klassenbibliothek benötigen, ziehen Sie an Ändern Sie dies nicht in Console App, nur um die Console.WriteLine) zu erhalten.

  2. Sie können System.Diagnostics.Debug.WriteLinein das Ausgabefenster schreiben (um das Ausgabefenster in VS anzuzeigen, gehen Sie zu Ansicht | Ausgabe ). Beachten Sie, dass diese Schreibvorgänge nur in einem Build ausgeführt werden, in dem die DEBUG-Bedingung definiert ist (standardmäßig definieren Debug-Builds dies und Release Builds nicht)

  3. Sie können es verwenden, System.Diagnostics.Trace.Writelinewenn Sie in Nicht-Debug-Builds in konfigurierbare "Listener" schreiben möchten. (Standardmäßig wird dies wie in das Ausgabefenster in Visual Studio geschrieben. Debug.Writeline)

JMarsch
quelle
2
Ich habe meine Ausgabe nicht gesehen, aber dann festgestellt, dass ich das Programm im Debug-Modus (F5) anstelle von Strg + Umschalt + F5 ausführen musste. Vielen Dank!
Travis Heeter
System.Diagnostics.Trace.Writeline scheint jedoch nicht zu funktionieren. Muss ich noch etwas dafür konfigurieren?
Travis Heeter
1
«1» - falsche Aussage. Mono zeigt die Ausgabe für alle Anwendungen an. «2» - ofc. Das Problem ist, dass die Methode nicht auch an das Terminal ausgegeben wird. Man kann also keine App auf dem PC ohne IDE debuggen.
Hi-Angel
34

Fügen Sie Console.Read();am Ende Ihres Programms ein hinzu. Dadurch wird verhindert, dass die Anwendung geschlossen wird, und Sie können die Ausgabe auf diese Weise sehen.

Dies ist eine Konsolenanwendung, die ich gerade ausgegraben habe und die nach der Verarbeitung, aber vor dem Beenden stoppt:

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
    }
}

Alternativ können Sie einfach einen Haltepunkt in die letzte Zeile einfügen.

Vincent Vancalbergh
quelle
2
Console.ReadLine funktioniert auch. Sie müssen nur die Eingabetaste drücken, um fortzufahren, wo Read einen Standardschlüssel akzeptiert.
Richard Adnams
Es ist eine Windows Form App und die Methode debug.write oder console.writeline scheint zu funktionieren
r3x
Euhm, warum geben Sie von einer Windows Form-App auf die Konsole aus? Ich schlage vor, stattdessen auf einem Formular oder einer Wählbox auszugeben. Oder machen Sie eine Konsolen-App ...
Vincent Vancalbergh
ja, das wurde mir schon gesagt, es ist nur ein dummer Fehler von meiner Seite, trotzdem danke für die Heads-up =)
r3x
Das Console.Read () bewirkt, dass das Konsolenfenster den Fokus erhält und daher vor VS angezeigt wird. Wenn Sie nach einem Console.Write () einfach einen Haltepunkt einfügen, wird im Konsolenfenster Ihre Ausgabe angezeigt, der Fokus ist jedoch nicht vorhanden, sodass er möglicherweise nicht sichtbar ist.
Nigel
21

Drücken Sie Ctrl+ F5, um das Programm anstelle von auszuführen F5.

waqasahmed
quelle
1
Strg + F5 startet die Anwendung, ohne dass ein Debugging durchgeführt wird. Im Ausgabefenster wird nichts angezeigt.
Richard Adnams
6
Das hat bei mir funktioniert; Ich wollte nur sehen, was das Programm ausgibt, keine der Konsolenausgaben wird angezeigt. Dies führte dazu, dass das Konsolenfenster nach dem Ausführen geöffnet blieb, sodass ich die Ausgabe sehen konnte.
davenpcj
+1, dies ist diejenige, wenn Sie nicht wirklich debuggen möchten (zeigt die Konsole und ermöglicht das Lesen der Ausgabe).
mlvljr
8

System.Diagnostics.Debug.WriteLine()wird funktionieren, aber Sie müssen an der richtigen Stelle nach der Ausgabe suchen. Klicken Sie in Visual Studio 2010 in der Menüleiste auf Debug -> Windows -> Ausgabe . Am unteren Rand des Bildschirms, der neben Ihrer Fehlerliste angedockt ist, sollte sich nun eine Registerkarte "Ausgabe" befinden. Klicken Sie darauf und überprüfen Sie, ob die Ausgabe des Debug-Streams in der Dropdown-Liste angezeigt wird.

PS: Ich denke, das Ausgabefenster wird bei einer Neuinstallation angezeigt, aber ich kann mich nicht erinnern. Wenn dies nicht der Fall ist oder Sie es versehentlich geschlossen haben, befolgen Sie diese Anweisungen.

Lordcheeto
quelle
0

Um die Windows-Konsole geöffnet zu halten und keine anderen Ausgabemethoden als den Standardausgabestream zu verwenden, gehen Sie zu Name Ihres Projekts -> Eigenschaften -> Linker -> System.

Wählen Sie dort die Registerkarte SubSytem und markieren Sie Console (/ SUBSYSTEM: CONSOLE). Sobald Sie dies getan haben, verwenden Sie beim Kompilieren Strg + F5 (Start ohne Debugging) und Ihre Konsole bleibt geöffnet. :) :)

Alex
quelle
Ich denke, es gilt für C ++, nicht für C # wie in der Frage.
Dmitry Fedorkov
0

Ich stoße aus irgendeinem Grund häufig darauf und kann mir nicht vorstellen, warum diese Lösung nicht erwähnt wurde:

Klicken Sie auf AnsichtAusgabe (oder halten Sie einfach CtrlW> O gedrückt)

Die Konsolenausgabe wird dann dort angezeigt, wo sich die Fenster Fehlerliste , Lokale und Überwachung befinden.

Hinweis: Ich verwende Visual Studio 2015.

Methodiker
quelle
Das von Ihnen erwähnte Ausgabefenster scheint vom Debugger generiert worden zu sein, da es viele Zeilen enthält, die sich auf das Laden von Assemblys, das Starten und Stoppen von Threads usw. beziehen. Dies unterscheidet sich von der Konsolenausgabe.
PeterVermont
0

Visual Studio deckt das Konsolenfenster selbst ab. Versuchen Sie, das übereinander gezeichnete Visual Studio-Fenster zu minimieren.

opsfunny
quelle
-1

In Program.cs zwischen:

static int Main(string[] agrs)
{

und den Rest Ihres Codes hinzufügen:

#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
George
quelle
Bitte fügen Sie eine Beschreibung hinzu, wie Ihr Code das Problem löst.
Koopakiller
-4

Sie können zwei kleine Methoden erstellen, eine, die am Anfang des Programms aufgerufen werden kann, die andere am Ende. Sie können auch Console.Read () verwenden, damit das Programm nach der letzten Schreibzeile nicht geschlossen wird.

Auf diese Weise können Sie bestimmen, wann Ihre Funktionalität ausgeführt wird und wann das Programm vorhanden ist.

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


endProgram()
{
    Console.WriteLine("-------Program Ends--------");
    Console.Read();
}
Joseph Kachere
quelle
Ich sehe nicht, wie diese Antwort neue Informationen zu der Frage bringt, da die Möglichkeit von Console.Read () bereits zuvor angegeben wurde.
ForceMagic