Schreiben in das Ausgabefenster von Visual Studio


605

Ich versuche, eine Nachricht zum Debuggen in das Ausgabefenster zu schreiben. Ich habe nach einer Funktion wie der von Java gesucht system.out.println(""). Ich habe versucht Debug.Write, Console.Writeund Trace.Write. Es gibt keinen Fehler aus, aber es wird auch nichts gedruckt.

Die Optionen "DEBUG-Konstante definieren" und "TRACE-Konstante definieren" sind aktiviert.

Menü ExtrasOptionenDebugging„Redirect alle Ausgabefenster Text in dem Direkt - Fenster“ Option wird nicht geprüft.

Konfiguration: Aktiv (Debug)

Hinweis: Ich habe ein Projekt mit dem Assistenten als "Windows Forms-Anwendung" erstellt, falls relevant. Ich habe keine Ahnung, wo ich suchen soll.


32
versuchen zu verwendenDebug.WriteLine()
Nikson Kanti Paul

9
Da dies ein älterer Beitrag ist, werde ich dies als Kommentar für diejenigen hinzufügen, die über die Frage stolpern. Anstatt den Code tatsächlich zu ändern, können Sie auch spezielle Haltepunkte verwenden, die als Tracepoints bezeichnet werden. Siehe MSDN-Dokumentation
Wonko the Sane

13
Nur eine Erinnerung daran, dass Debug.WriteLine () nur funktioniert, wenn es in Debug ausgeführt wird. Das bedeutet, dass es mit F5 und nicht mit STRG-F5 ausgeführt wird. Das ist leicht zu übersehen.
Kirk.burleson

3
Das stimmt, aber ein praktisches Tool ist DebugView, das alle Ausgaben für den Debug-Stream
anzeigt,

2
Wenn Sie versuchen, die Ausgabe eines Komponententests zu schreiben, der unter dem Visual Studio-Testframework ausgeführt wird, sind die Regeln etwas anders. Weitere Informationen finden Sie in dieser Antwort .
Yooy

Antworten:


754

Fügen Sie den System.DiagnosticsNamespace hinzu, und Debug.WriteLine()drucken Sie dann schnell eine Nachricht im Ausgabefenster der IDE. Weitere Einzelheiten entnehmen Sie bitte diesen:


2
Vielen Dank. Ich nehme an, es gibt keine Möglichkeit, in die Ausgabe zu schreiben, wenn ich ohne Debugging (Strg-F5) starte, oder?
vorherige_Entwickler

1
Ich denke, Sie suchen danach: stackoverflow.com/questions/562590/…
Bhargav Bhat

Nochmals vielen Dank, aber das funktioniert bei mir nicht. Trace wird ohne Debugging-Modus nicht gedruckt, selbst wenn die TRACE-Konstante definiert ist.
Vorheriger_Entwickler

Habe gerade eine kleine App hier laufen lassen, funktioniert gut für mich. Vielleicht gibt es einen kleinen Fehler in Ihrer Umgebung?
Bhargav Bhat

1
Dies ist mein Testcode; pastebin.com/b7P0bYEa Es ist ziemlich einfach, aber immer noch nichts. Ich werde es auf einem anderen System versuchen.
vorherige_Entwickler

154

Dies schreibt in das Debug-Ausgabefenster:

using System.Diagnostics;

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

6
Für mich "gibt" dies an das
Sofortfenster aus

Ich habe dies bei einer Reihe von Unit-Tests versucht. Ich habe den ausgewählten Test debuggt, aber es gab nichts von dem, was ich im Debug-Fenster auszudrucken versuchte.
Frank H.

Dies wird jedoch erst nach dem Schließen der Webseite im Debug-Fenster ausgegeben. Ich möchte eine sofortige Anzeige, wenn ich den Code ausführe. Warten Sie eine Minute - ich habe festgestellt, dass das Ausgabefenster ausgeblendet ist, während der Code ausgeführt wird. Wenn ich das Fenster anzeige, ist meine Ausgabe dort.
Joe Cotton

Können wir ein Protokoll dieser Nachricht führen, das im Debug-Fenster gedruckt wird? oder bietet Visual Studio eine Möglichkeit, auf die Protokolle des Debug-Fensters zuzugreifen?
Anmol Rathod

82

Verwenden:

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

55
Debug.WriteLine

ist was du suchst.

Wenn nicht, versuchen Sie Folgendes:

Menü ExtrasOptionenDebugging → Deaktivieren Sie die Option Send Ausgabe auf Immediate .


1
Möglicherweise fügt Debug.Write () den Wagenrücklauf nicht ein, sodass Nachrichten gepuffert werden.
Guy Starbuck

2
Ich habe die Debug.WriteLine ("String") erst gesehen, nachdem ich das getan habe, was Micah gesagt hat. Tools|Options|Debugging uncheck Send Output to Immediate
Skindeep2366

3
Ich denke, in den späteren Versionen ist das Kontrollkästchen "Alle Ausgabefenster Text in Sofortfenster umleiten"
Houdini Sutherland

6
In VS 2015 heißt es: "Leiten Sie den gesamten Text des Ausgabefensters in das Sofortfenster um", nur für den Fall, dass einige nach 5 Minuten suchen mussten, um die entsprechende Einstellung zu finden :) - Ich habe nach oben und unten gescrollt, um eine Option zu finden, die mit beginnt. " Senden ... ":)
dba

22

Für mich funktionierte nur der Trace- Namespace und nicht der Debug-Namespace:

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

Ich arbeite in einem C # -Projekt unter Visual Studio 2010.


2
Ich verwende VS 2013 Professional und versuche, mithilfe des Visual Studio-Unit-Test-Frameworks eine Ausgabe von einem Komponententest abzurufen. Es scheint, dass das Testkabel Debug.WriteLine erfasst und umleitet, Trace.WriteLine jedoch nicht. Außerdem wird die Trace-Ausgabe nur angezeigt, wenn Sie die Tests debuggen (und nicht nur ausführen).
Yooy

15

Sie suchen vielleicht

MessageBox.Show()

oder

Debug.Writeline()

8
MessageBox.Show()kann sehr ärgerlich sein, wenn Sie mehrere Werte für Debugging-Zwecke schreiben möchten.
Dementic

4
Die Frage lautete "Schreiben in das Ausgabefenster von Visual Studio?" nicht zu einem Meldungsfeld.
Amir Touitou

@AmirTwito Ein Meldungsfeld ist ein Ausgabefenster.
ProfK

4
Ja, Sie haben Recht, aber die Frage war "In das Ausgabefenster von Visual Studio schreiben?" und nicht zu einem einfachen Meldungsfeld mit diesem Code: MessageBox.Show ()
Amir Touitou

4
@ProfK Das Visual Studio-Ausgabefenster ist ein sehr spezifisches GUI-Element des spezifischen Programms und MessageBox.Showschreibt nicht darauf.
jpmc26

9

Der Anruf

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

schlägt bei der Arbeit mit .NET Core fehl (V 1.0 oder 1.1) .

Wir sollten einen Logger aus erstellen und verwenden Microsoft.Extensions.Logging, aber dieses Protokoll wird nur im Popup-Konsolenfenster dotnet.exe angezeigt, nicht im Ausgabefenster von Visual Studio.


Debug.WriteLine (), Console.WriteLine () und Trace.WriteLine () geben also in Output for .Net Core nichts aus? Gibt es eine Möglichkeit, eine einfache Protokollierung zu verwenden, ohne eine Protokollklasse schreiben zu müssen? Haben unter Extras> Optionen> Debuggen gesucht und unter "Ausgabe anzeigen von:" nach möglichen Lösungen gesucht.
Wouter Vanherck

4

Dies erfordert ein Framework von Drittanbietern, nämlich Serilog , aber ich habe es trotzdem als sehr empfunden reibungslose Erfahrung ist, die Ausgabe an einen Ort zu bringen, an dem ich sie sehen kann.

Sie müssen zuerst die Trace-Senke von Serilog installieren . Nach der Installation müssen Sie den Logger wie folgt einrichten:

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

(Sie können eine andere Mindeststufe oder einen Konfigurationswert oder eine der normalen Serilog-Funktionen festlegen. Sie können den TraceLogger auch auf eine bestimmte Stufe einstellen, um Konfigurationen zu überschreiben, oder wie auch immer Sie dies tun möchten.)

Dann protokollieren Sie Nachrichten einfach normal und sie werden in Ihrem Ausgabefenster angezeigt:

Logger.Information("Did stuff!");

Dies scheint keine so große Sache zu sein, daher möchte ich einige zusätzliche Vorteile erläutern. Das größte Problem für mich war, dass ich mich gleichzeitig im Ausgabefenster und in der Konsole anmelden konnte :

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

Dies gab mir große Flexibilität hinsichtlich der Art und Weise, wie ich die Ausgabe verbrauchte, ohne alle meine Anrufe Console.Writemit duplizieren zu müssen Debug.Write. Beim Schreiben des Codes konnte ich mein Befehlszeilentool in Visual Studio ausführen, ohne befürchten zu müssen, dass meine Ausgabe beim Beenden verloren geht. Als ich es bereitgestellt hatte und etwas debuggen musste (und Visual Studio nicht verfügbar hatte), war die Konsolenausgabe für meinen Verbrauch sofort verfügbar. Dieselben Nachrichten können auch in einer Datei (oder einer anderen Art von Senke) protokolliert werden, wenn sie als geplante Aufgabe ausgeführt wird.

Unter dem Strich war es mit Serilog sehr einfach, Nachrichten an eine Vielzahl von Zielen zu senden, sodass ich unabhängig von der Ausführung immer problemlos auf die Ausgabe zugreifen konnte.

Es erfordert auch sehr minimale Einrichtung und Code.


1
Serilog hat jetzt auch eine "Debug" -Senke unter github.com/serilog/serilog-sinks-debug , die auf ähnliche Weise funktioniert, aber eine etwas schönere Formatierung hat :-) HTH!
Nicholas Blumhardt

Warum nicht eine .net-Methode öffentlich machen (möglicherweise statisch) und dort alles, was Sie brauchen, wie Console.Write oder Debug.Write usw., ablegen und überall verwenden?
Saulius

@Saulius "Dieselben Nachrichten können auch in einer Datei (oder einer anderen Art von Senke) protokolliert werden, wenn sie als geplante Aufgabe ausgeführt werden. Unter dem Strich war es mit Serilog sehr einfach, Nachrichten an eine Vielzahl von Nachrichten zu senden Ziele, um sicherzustellen, dass ich immer problemlos auf die Ausgabe zugreifen kann, unabhängig davon, wie ich sie ausgeführt habe. "
jpmc26

1

Dies ist keine Antwort auf die ursprüngliche Frage. Da ich diese Frage bei der Suche nach einem Mittel zum interaktiven Speichern von Objektdaten gefunden habe, dachte ich, dass andere davon profitieren könnten, wenn sie diese sehr nützliche Alternative erwähnen.

Ich habe letztendlich das Befehlsfenster verwendet und den Debug.PrintBefehl eingegeben , wie unten gezeigt. Dies druckte ein Speicherobjekt in einem Format, das als Text kopiert werden kann, was alles ist, was ich wirklich brauchte.

> Debug.Print <item>

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


0

In Visual Studio 2015 hat Folgendes für mich funktioniert:

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

Lesen Sie hier die Dokumentation zu OutputDebugStringW .

Geben Sie hier die Bildbeschreibung ein Beachten Sie, dass diese Methode nur funktioniert, wenn Sie Ihren Code debuggen ( debug mode)


11
Ist das C ++? Die Frage ist mit c # gekennzeichnet .
jpmc26

0

Zu Debugging-Zwecken wird der System.Diagnostics.Debug.Writeline()Befehl nur dann in die Release-Version Ihres Codes kompiliert, wenn Sie über Debug-Listener verfügen. Es schreibt in alle Trace-Listener, einschließlich des VS-Ausgabefensters, wenn es im Debug-Modus ausgeführt wird.

Für eine Konsolenanwendung. Console.Writeline()würde funktionieren, aber die Ausgabe würde immer noch in der Release-Version Ihrer Binärdatei generiert.

Die Debug-Ausgabe sollte beim Debuggen von Tests auch im normalen Ausgabefenster angezeigt werden. Die Ausgabe von console.writeline funktioniert nicht (befindet sich jedoch im Testausgabefenster.)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.