2009-07-21 2 views
119

Il seguente programma C# (creato con csc hello.cs) stampa solo Hello via Console! sulla console e Hello via OutputDebugString nella finestra DebugView. Tuttavia, non riesco a visualizzare nessuna delle chiamate System.Diagnostics.*. Perché?Dove viene visualizzato l'output 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"); 
    } 
} 

C'è forse qualche speciale della riga di comando necessari per csc?

Non sto usando Visual Studio per nessuno dei miei sviluppi, questa è pura roba da riga di comando.

+0

come accennato qualche commento in un'altra risposta, può usare (SysInternals) DebugView di Microsoft: http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx –

risposta

62

Come altri hanno sottolineato, gli ascoltatori devono essere registrati per leggere questi flussi. Si noti inoltre che Debug.Write funzionerà solo se è impostato il flag di build DEBUG, mentre Trace.Write funzionerà solo se è impostato il flag di build TRACE.

Impostazione dei DEBUG e/o bandiere TRACE è fatto facilmente nelle proprietà del progetto in Visual Studio o fornendo i seguenti argomenti per Csc.exe

/define:DEBUG;TRACE

+3

È stato utile (non me l'aspettavo) di scoprire che gli oggetti Debug e Trace utilizzano gli stessi listener di traccia, quindi, sia l'output Debug.Write che Trace.Write nello stesso posto (i), è proprio quello a seconda delle condizioni che potrebbero non essere eseguite –

+0

potresti approfondire su quali * condizioni * sono? esattamente quale situazione un debug.Write non funzionerà come un trace.write? – Pacerier

+2

questo non funziona per me, ho i flag di debug e trace impostati nelle proprietà del progetto vs e sto usando Debug.WriteLine, la riga viene eseguita, ma non appare nulla nella finestra di output, qualcuno ha ricevuto altri consigli? – f1wade

7

Durante il debug in Visual Studio, visualizzare la finestra "Output" (Visualizza-> Output). Mostrerà lì.

messaggi
+1

Questa è un'osservazione semplice ma utile. – EleventhDoctor

39

È necessario aggiungere un TraceListener per vedere apparire sulla console.

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

Sono visualizzati anche nella finestra Output di Visual Studio in modalità Debug.

+1

Ma gli ascoltatori mostrano i risultati di OutputDebugString? –

+2

Apparentemente DebugView acquisirà sia .NET Debug.Write() che Win32 OutputDebugString(): http://technet.microsoft.com/en-us/sysinternals/bb896647 – dlchambers

+0

@dlchambers: Non penso che sia corretto. Quella pagina richiede la visualizzazione di 'OutputDebugString()' e (kernel) 'DbgPrint().' –

97

Durante il debug System.Diagnostics.Debug.WriteLine visualizzerà nella finestra di output (Ctrl + Alt + O), è possibile Aggiungere anche un TraceListener alla raccolta Debug.Listeners per specificare le chiamate Debug.WriteLine per l'output in altre posizioni.

Nota: Debug.WriteLine chiamate non possono essere visualizzati nella finestra di output se avete la Studio possibilità visiva "Redirect tutto il testo finestra di output alla finestra immediata" selezionata nel menu StrumentiOpzionidebugGenerale. Per visualizzare "Strumenti →OpzioniDebugging", selezionare la casella accanto a "Strumenti →OpzioniMostra tutte le impostazioni".

+3

Vorrei confermare che (Ctrl + Alt + O) verrà visualizzata la finestra di output durante il debug in Visual Studio 2012 – Ishikawa

2

Quando scrivo debug.write ("") nel codice, viene emesso nella "Finestra Immediata", non nella "Finestra di output".

Puoi provarlo. Per visualizzare la finestra "Immediata" (DebugFinestraImmediata).

0

Per VB.NET vale quanto segue. Devi selezionare "Debug" e assicurarti di "Avviare il debug". Questo può essere raggiunto premendo F5.

Anche Console.WriteLine visualizza i messaggi solo quando si crea come "Rilascio" nella finestra Output.

Come accennato prima, aprire la finestra di output con Vistauscita e assicurarsi di selezionare "Build" se si desidera visualizzare i messaggi Console.WriteLine o "Debug" se si desidera visualizzare Debug.WriteLine o Trace.WriteLine messaggi.

2

La soluzione per il mio caso è:

  1. clic destro della finestra di uscita;
  2. Controllare il 'Programma Output'