2009-07-21 10 views
119

Das folgende C# -Programm (mit csc hello.cs erstellt) druckt nur Hello via Console! auf der Konsole und Hello via OutputDebugString im DebugView-Fenster. Ich kann jedoch keine der System.Diagnostics.* Anrufe sehen. Warum das?Wo erscheint die Ausgabe von System.Diagnostics.Debug.Write?

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"); 
    } 
} 

Gibt es vielleicht noch einige spezielle Befehlszeilenoptionen für csc erforderlich?

Ich benutze Visual Studio für keine meiner Entwicklung, das ist reine Befehlszeile.

+0

als irgend Kommentar in einer anderen Antwort erwähnt, kann Microsoft (Sysinternals) Debugview verwenden: http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx –

Antwort

62

Wie andere darauf hingewiesen haben, müssen Zuhörer registriert werden, um diese Ströme zu lesen. Beachten Sie auch, dass Debug.Write nur funktioniert, wenn das Build-Flag DEBUG gesetzt ist, während Trace.Write nur funktioniert, wenn das Build-Flag TRACE gesetzt ist.

Einstellen der DEBUG und/oder TRACE Flaggen sind in den Projekteigenschaften in Visual Studio oder, indem die folgenden Argumente leicht getan Csc.exe

/define:DEBUG;TRACE

+3

Es war nützlich (hätte ich nicht erwartet), dass Debug- und Trace-Objekte dieselben Trace-Listener verwenden, also sowohl Debug.Write als auch Trace.Write an derselben Stelle ausgeben, genau das ist es abhängig von den Bedingungen werden sie möglicherweise nicht ausgeführt –

+0

Könnten Sie näher erläutern, unter welchen * Bedingungen * sie stehen? genau in welcher situation wird ein debug.Write nicht wie ein trace.write funktionieren? – Pacerier

+2

das funktioniert nicht für mich, ich habe Debug und Trace-Flags in vs Projekteigenschaften festgelegt, und verwende Debug.WriteLine, die Zeile ausgeführt wird, aber nichts erscheint im Ausgabefenster, hat jemand andere Beratung? – f1wade

7

Zeigen Sie während des Debuggens in Visual Studio das Fenster "Ausgabe" (Ansicht-> Ausgabe) an. Es wird dort zeigen.

+1

Dies ist eine einfache, aber hilfreiche Beobachtung. – EleventhDoctor

39

Sie benötigen ein TraceListener hinzufügen Output Window angezeigt zu sehen, wie sie auf der Konsole erscheinen.

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

Sie erscheinen auch im Visual Studio-Ausgabefenster im Debug-Modus.

+1

Aber zeigen Listener die Ergebnisse von OutputDebugString? –

+2

Anscheinend wird DebugView sowohl die .NET Debug.Write() und Win32 OutputDebugString() erfassen: http://technet.microsoft.com/en-us/sysinternals/bb896647 – dlchambers

+0

@ dl Chambers: Ich glaube nicht, dass das korrekt ist. Diese Seite beansprucht die Anzeige von 'OutputDebugString()' und (Kernel) 'DbgPrint().' –

97

Während System.Diagnostics.Debug.WriteLine Debuggen wird angezeigt im Ausgabefenster (Strg + Alt + O) können Sie a Fügen Sie auch TraceListener zur Debug.Listeners Sammlung hinzu, um Debug.WriteLine Aufrufe anzugeben, die an anderen Orten ausgegeben werden sollen.

Hinweis: Debug.WriteLine Anrufe im Ausgabefenster kann nicht angezeigt werden, wenn Sie die Visual Studio Option „alle Ausgabefenster umleiten Text auf das Direkt-Fenster“ unter dem Menü geprüft WerkzeugeOptionenDebuggenAllgemein. Zur Anzeige "WerkzeugeOptionenDebuggen" markieren Sie das Kästchen neben "WerkzeugeOptionenAlle Einstellungen anzeigen".

+3

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

2

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

Sie können es versuchen. Zur Anzeige des "Immediate" -Fensters (DebugFensterImmediate).

0

Für VB.NET gilt Folgendes. Sie müssen "Debug" wählen und sicherstellen, dass Sie "Debugging starten". Dies kann erreicht werden, indem F5 gedrückt wird.

Auch die Console.WriteLine zeigt nur Nachrichten an, wenn Sie in Ihrem Ausgabefenster als "Release" erstellen.

Wie bereits erwähnt, öffnen Sie das Ausgabefenster mit AnsichtAusgang und vergewissern Sie sich, um entweder „Build“, wenn Sie Console.WriteLine Nachrichten oder „Debug“ sehen möchten, wenn Sie Debug.WriteLine sehen wollen oder Trace.WriteLine-Nachrichten.

2

Die Lösung für meinen Fall ist:

  1. rechts das Ausgabefenster klicken;
  2. Überprüfen Sie die 'Programmausgabe'
Verwandte Themen