Wo wird die Ausgabe von System.Diagnostics.Debug.Write angezeigt?


146

Das folgende C # -Programm (erstellt mit csc hello.cs) wird nur Hello via Console!auf der Konsole und Hello via OutputDebugStringim DebugView-Fenster gedruckt. Ich kann jedoch keinen der System.Diagnostics.*Anrufe sehen. Warum ist das so?

using System;
using System.Runtime.InteropServices;
class Hello {
    [DllImport("kernel32.dll", CharSet=CharSet.Auto)]
    public static extern void OutputDebugString(string message);

    static void Main() {
        Console.Write( "Hello via Console!" );
        System.Diagnostics.Debug.Write( "Hello via Debug!" );
        System.Diagnostics.Trace.Write( "Hello via Trace!" );
        OutputDebugString( "Hello via OutputDebugString" );
    }
}

Sind möglicherweise spezielle Befehlszeilenoptionen erforderlich csc?

Ich verwende Visual Studio für keine meiner Entwicklungen, dies ist reines Kommandozeilenmaterial.


Wie bei einem Kommentar in einer anderen Antwort erwähnt, kann Microsoft (SysInternals) DebugView verwenden: technet.microsoft.com/en-us/sysinternals/bb896647.aspx
George Birbilis

Antworten:


77

Wie andere bereits betont haben, müssen Hörer registriert sein, um diese Streams lesen zu können. Beachten Sie auch, dass dies Debug.Writenur funktioniert, wenn das DEBUGBuild-Flag gesetzt ist, während Trace.Writees nur funktioniert, wenn das TRACEBuild-Flag gesetzt ist.

Das Setzen der DEBUGund / oder TRACEFlags erfolgt einfach in den Projekteigenschaften in Visual Studio oder indem Sie csc.exe die folgenden Argumente geben

/define:DEBUG;TRACE


5
Es war nützlich (hatte das nicht erwartet) für mich herauszufinden, dass Debug- und Trace-Objekte dieselben Trace-Listener verwenden. Daher werden sowohl Debug.Write- als auch Trace.Write-Ausgaben an denselben Orten ausgegeben. Dies hängt nur davon ab unter Bedingungen, unter denen sie möglicherweise nicht hingerichtet werden
hello_earth

1
Könnten Sie näher erläutern, unter welchen Bedingungen dies geschieht? Genau in welcher Situation funktioniert ein Debug.Write nicht wie ein trace.write?
Pacerier

2
Dies funktioniert nicht für mich, ich habe Debug- und Trace-Flags in vs Projekteigenschaften gesetzt und verwende Debug.WriteLine, die Zeile wird ausgeführt, aber nichts wird im Ausgabefenster angezeigt, hat jemand andere Ratschläge?
f1wade

114

Während das Debuggen System.Diagnostics.Debug.WriteLineim Ausgabefenster angezeigt wird ( Ctrl+ Alt+ O), können Sie TraceListenerder Debug.ListenersSammlung auch ein hinzufügen , um Debug.WriteLineAufrufe anzugeben, die an anderen Speicherorten ausgegeben werden sollen.

Hinweis: Debug.WriteLineAufrufe werden möglicherweise nicht im Ausgabefenster angezeigt, wenn die Visual Studio-Option "Alle Texte des Ausgabefensters in das Sofortfenster umleiten" im Menü ExtrasOptionenDebuggingAllgemein aktiviert ist . Um " ExtrasOptionenDebuggen " anzuzeigen , aktivieren Sie das Kontrollkästchen neben " ExtrasOptionenAlle Einstellungen anzeigen ".


4
Ich möchte bestätigen, dass (Strg + Alt + O) das Ausgabefenster beim Debuggen in Visual Studio 2012
Ishikawa

45

Sie müssen ein hinzufügen TraceListener, damit sie in der Konsole angezeigt werden.

TextWriterTraceListener writer = new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(writer);

Sie werden im Debug-Modus auch im Visual Studio-Ausgabefenster angezeigt.


2
Anscheinend wird DebugView sowohl .NET Debug.Write () als auch Win32 OutputDebugString () erfassen: technet.microsoft.com/en-us/sysinternals/bb896647
dlchambers

@dlchambers: Ich denke nicht, dass das richtig ist. Diese Seite behauptet Anzeige von OutputDebugString()und (Kernel)DbgPrint().
Mike C

1
@dlchambers: Ich ziehe den Kommentar zurück; Ich habe festgestellt, dass DebugView erfassen kann, Debug.Write() wenn die Erfassungseinstellungen "Global Win32" enthalten - was erfordert, dass es im Admin-Modus ausgeführt wird.
Mike C

10

Zeigen Sie beim Debuggen in Visual Studio das Fenster "Ausgabe" an (Ansicht-> Ausgabe). Es wird dort zeigen.



5

Wenn ich debug.write ("") in den Code schreibe , wird es im " Sofortfenster" ausgegeben , nicht im "Ausgabefenster".

Du kannst es versuchen. Zur Anzeige des Fensters "Sofort" ( DebugFensterSofort ).


2

Die Lösung für meinen Fall lautet:

  1. Klicken Sie mit der rechten Maustaste auf das Ausgabefenster.
  2. Überprüfen Sie die 'Programmausgabe'

0

Für VB.NET gilt Folgendes. Sie müssen "Debuggen" auswählen UND sicherstellen, dass Sie "Debuggen starten". Dies kann durch Drücken erreicht werden F5.

Außerdem zeigt die Console.WriteLine nur Meldungen an, wenn sie in Ihrem Ausgabefenster als "Release" erstellt wird.

Öffnen Sie, wie bereits erwähnt, das Ausgabefenster mit AnsichtAusgabe UND stellen Sie sicher, dass Sie entweder "Erstellen" auswählen, wenn Sie Console.WriteLine-Nachrichten anzeigen möchten, oder "Debug", wenn Sie Debug.WriteLine- oder Trace.WriteLine-Nachrichten anzeigen möchten.

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.