c# - Schreiben in das Ausgabefenster von Visual Studio?


Ich versuche, eine Nachricht zu Debugzwecken in das Ausgabefenster zu schreiben. Ich suchte nach einer Funktion wie Java's system.out.println("") . Ich habe versucht, Debug.Write , Console.Write und Trace.Write . Es gibt keinen Fehler, aber es wird auch nichts gedruckt.

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

Menü ExtrasOptionenDebuggen"Alle Ausgabefenster Text in das Direktfenster umleiten" ist nicht aktiviert.

Konfiguration: Aktiv (Debug)

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



Answers






Dies wird in das Debug-Ausgabefenster schreiben:

using System.Diagnostics;

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



Benutzen:

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



    Debug.WriteLine

ist was du suchst.

Wenn nicht, versuchen Sie Folgendes:

Menü Extras → OptionenDebuggenAusgabe auf Sofort beenden deaktivieren.




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.




Vielleicht suchen Sie

MessageBox.Show()

oder

Debug.Writeline()



Der Anruf

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

schlägt fehl, wenn Sie mit .NET Core (V 1.0 oder 1.1) arbeiten.

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




Dies erfordert ein Framework von Drittanbietern, nämlich Serilog , aber ich habe es trotzdem für eine sehr reibungslose Erfahrung gehalten, 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 einen anderen Mindestwert festlegen oder ihn auf einen Konfigurationswert oder eine der normalen Serilog-Funktionen setzen. Sie können den Trace Logger auch auf eine bestimmte Stufe setzen, um die Konfiguration zu überschreiben oder wie Sie dies auch tun möchten.)

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

Logger.Information("Did stuff!");

Das scheint keine so große Sache zu sein, also lassen Sie mich einige zusätzliche Vorteile erklären. Der größte für mich war, dass ich mich gleichzeitig sowohl im Ausgabefenster als auch in der Konsole anmelden konnte:

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

Das gab mir eine große Flexibilität in Bezug darauf, wie ich die Ausgabe verbrauchte, ohne dass ich alle meine Aufrufe von Debug.Write . Debug.Write mit Debug.Write . Beim Schreiben des Codes konnte ich mein Befehlszeilentool in Visual Studio ausführen, ohne befürchten zu müssen, dass ich beim Verlassen meine Ausgabe verlor. 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. Die gleichen 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 hat Serilog dazu beigetragen, dass es sehr einfach ist, Nachrichten an eine Vielzahl von Zielen zu senden, so dass ich jederzeit problemlos auf die Ausgabe zugreifen kann, unabhängig davon, wie ich sie ausgeführt habe.

Es erfordert auch sehr minimale Einrichtung und Code.




Drucken Sie in das Ausgabefenster von Visual Studio:

Debug.Writeline();



Folgendes funktionierte für mich in Visual Studio 2015 :

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

Lesen Sie die Dokumentation zu OutputDebugStringW hier .

Beachten Sie, dass diese Methode nur funktioniert, wenn Sie Ihren Code debug mode ( debug mode )




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

Ich habe schließlich das Befehlsfenster verwendet und den Befehl Debug.Print , wie unten gezeigt. Dadurch wurde ein Speicherobjekt in einem Format gedruckt, das als Text kopiert werden kann. Das ist alles, 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"