Dove viene visualizzato l'output System.Diagnostics.Debug.Write?


147

Il seguente programma C # (costruito con csc hello.cs) stampa solo Hello via Console!sulla console e Hello via OutputDebugStringnella finestra DebugView. Tuttavia, non riesco a vedere nessuna delle System.Diagnostics.*chiamate. Perché?

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 opzione speciale da riga di comando richiesta per csc?

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


come menzionato in alcuni commenti in un'altra risposta, è possibile utilizzare Microsoft DebugView (SysInternals): technet.microsoft.com/en-us/sysinternals/bb896647.aspx
George Birbilis,

Risposte:


77

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

L'impostazione dei flag DEBUGe / o TRACEviene eseguita facilmente nelle proprietà del progetto in Visual Studio o fornendo i seguenti argomenti a csc.exe

/define:DEBUG;TRACE


5
Per me è stato utile (non me lo aspettavo) scoprire che gli oggetti Debug e Trace usano gli stessi listener di traccia, quindi sia Debug.Write che Trace.Write l'output negli stessi luoghi, dipende solo da a condizioni che potrebbero non essere eseguiti
hello_earth,

1
potresti approfondire quali sono le condizioni ? esattamente quale situazione un debug.Write non funzionerà allo stesso modo di trace.write?
Pacerier,

2
questo non funziona per me, ho flag di debug e di traccia impostati nelle proprietà del progetto vs e sto usando Debug.WriteLine, la linea viene eseguita, ma nulla appare nella finestra di output, qualcuno ha qualche altro consiglio?
f1wade,

114

Mentre il debug System.Diagnostics.Debug.WriteLineverrà visualizzato nella finestra di output ( Ctrl+ Alt+ O), è anche possibile aggiungere TraceListenera alla Debug.Listenersraccolta per specificare le Debug.WriteLinechiamate all'output in altre posizioni.

Nota: le Debug.WriteLinechiamate potrebbero non essere visualizzate nella finestra di output se l'opzione Visual Studio "Reindirizza tutto il testo della finestra di output sulla finestra immediata" è selezionata nel menu StrumentiOpzioniDebugGenerale . Per visualizzare " StrumentiOpzioniDebug ", seleziona la casella accanto a " StrumentiOpzioniMostra tutte le impostazioni ".


4
Vorrei confermare che (Ctrl + Alt + O) visualizzerà la finestra di output durante il debug in Visual Studio 2012
Ishikawa,

45

Devi aggiungere un TraceListenerper vederli apparire sulla console.

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

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


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

@dlchambers: non credo sia corretto. Quella pagina afferma la visualizzazione di OutputDebugString()e (kernel)DbgPrint().
Mike C

1
@dlchambers: ritiro il commento; Ho scoperto che DebugView può acquisire Debug.Write() se le sue impostazioni di acquisizione includono "Global Win32", che richiede di eseguirlo in modalità amministratore.
Mike C

10

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


6

I messaggi di diagnostica vengono visualizzati nella finestra di output.


5

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

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


2

La soluzione per il mio caso è:

  1. Fare clic con il tasto destro sulla finestra di output;
  2. Controllare "Uscita programma"

0

Per VB.NET vale quanto segue. Devi selezionare "Debug" E assicurarti di "Avvia Debug". Questo può essere raggiunto premendo F5.

Inoltre Console.WriteLine visualizzerà i messaggi solo quando si crea come "Rilascio" nella finestra Output.

Come accennato in precedenza, aprire la finestra Output con VisualizzaOutput E assicurarsi di selezionare "Build" se si desidera visualizzare i messaggi Console.WriteLine o "Debug" se si desidera visualizzare i messaggi Debug.WriteLine o Trace.WriteLine.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.