ModalitÓ di analisi e debug in Visual C#

Traduzione articoli Traduzione articoli
Identificativo articolo: 815788 - Visualizza i prodotti a cui si riferisce l?articolo.
Per una versione di Microsoft Visual Basic .NET di questo articolo, vedere 313417 .
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

In questo articolo viene descritto come utilizzare le classi Trace e Debug . Queste classi sono disponibili in Microsoft .NET Framework. ╚ possibile utilizzare queste classi per fornire informazioni sul prestazioni di un'applicazione durante lo sviluppo di applicazioni o dopo distribuzione per la produzione. Queste classi sono solo una parte del funzionalitÓ di strumentazione disponibili nel.NET Framework.

Requisiti

Di seguito sono elencati i requisiti hardware consigliati, software, infrastruttura di rete e i service pack necessari:
  • Microsoft Windows 2000 o Microsoft Windows XP o Microsoft Windows Server 2003
  • Microsoft Visual C#
In questo articolo si presuppone inoltre che si abbia familiaritÓ con il programma il debug.

Descrizione della tecnica


I passaggi di Creare un Esempio con la classe Debug sezione viene illustrato come creare un applicazione console che utilizza la classe Debug per fornire informazioni sull'esecuzione del programma.

Quando si esegue il programma, Ŕ possibile utilizzare i metodi della classe Debug per produrre messaggi che consentono di monitorare il programma sequenza di esecuzione, rilevamento dei malfunzionamenti o per fornire prestazioni informazioni sulla misurazione. Per impostazione predefinita, i messaggi che genera la classe Debug vengono visualizzati nella finestra di Output di Visual Studio Ambiente di sviluppo integrato (IDE).

Il codice di esempio utilizza il metodo WriteLine per produrre un messaggio seguito da una riga terminatore. Quando si utilizza questo metodo per produrre un messaggio, viene visualizzato ogni messaggio in una riga separata nella finestra di Output.

Quando si utilizza il metodo Assert della classe Debug , finestra di Output viene visualizzato un messaggio solo se l'oggetto specificato condizione restituisce false. Viene inoltre visualizzato il messaggio in una finestra di dialogo modale per l'utente. Nella finestra di dialogo include il messaggio, il nome del progetto e il numero di istruzione Assert . Nella finestra di dialogo include le seguenti operazioni tre pulsanti di comando:
  • Interruzione: Arresto dell'applicazione.
  • Tentativi: L'applicazione viene attivata la modalitÓ di debug.
  • Ignora: L'applicazione procede.
L'utente dovrÓ scegliere uno di questi pulsanti prima dell'applicazione pu˛ continuare.

╚ anche possibile indirizzare l'output della classe Debug a destinazioni diverse dalla finestra di Output. La classe Debug dispone di un insieme denominato di listener che include gli oggetti Listener .

Ogni oggetto Listener controlla l'output di Debug e l'output in una destinazione specifica.

Ogni Listener nell'insieme di Listener di ricevere qualsiasi output che genera la classe Debug . Utilizzare la classe TextWriterTraceListener per definire gli oggetti Listener . ╚ possibile specificare la destinazione per una classe TextWriterTraceListener mediante il costruttore.

Alcune possibili output destinazioni seguenti:
  • La finestra di Console utilizzando la proprietÓ System.Console.Out .
  • Un file di testo (txt) utilizzando l'istruzione System.IO.File.CreateText("FileName.txt") .
Dopo aver creato un oggetto TextWriterTraceListener , Ŕ necessario aggiungere l'oggetto all'insieme Listeners di ricevere l'output di Debug.

Creare un campione con la classe Debug

  1. Avviare Visual Studio o Visual C# Express Edition.
  2. Creare un nuovo progetto applicazione Console in Visual C# denominato conInfo. In Visual Studio .NET viene creato Class1. Program. cs viene creato in Visual Studio 2005.
  3. Aggiungere lo spazio dei nomi seguente all'inizio di Class1 o Program. cs.
    using System.Diagnostics;
  4. Per inizializzare variabili contenenti informazioni su un prodotto, aggiungere le seguenti istruzioni di dichiarazione di metodo Main :
    string sProdName = "Widget";
    int iUnitQty = 100;
    double dUnitCost = 1.03;
  5. Specificare il messaggio che genera la classe del primo parametro di input del metodo WriteLine . Premere la combinazione di tasti CTRL + ALT + O per assicurarsi che Nella finestra di Output Ŕ visibile.
    Debug.WriteLine("Debug Information-Product Starting ");
  6. Per migliorare la leggibilitÓ, utilizzare il metodo di rientro per il rientro dei messaggi successivi nella finestra di Output:
    Debug.Indent();
  7. Per visualizzare il contenuto delle variabili selezionate, utilizzare il metodo WriteLine come segue:
    Debug.WriteLine("The product name is " + sProdName);
    Debug.WriteLine("The available units on hand are" + iUnitQty.ToString());
    Debug.WriteLine("The per unit cost is " + dUnitCost.ToString());
  8. ╚ inoltre possibile utilizzare il metodo WriteLine per visualizzare lo spazio dei nomi e il nome della classe per un oggetto esistente. Ad esempio, il codice seguente visualizza lo spazio dei nomi System.Xml.XmlDocument nella finestra di Output:
    System.Xml.XmlDocument oxml = new System.Xml.XmlDocument();
    Debug.WriteLine(oxml);
  9. Per organizzare l'output, Ŕ possibile includere una categoria come un facoltativo, secondo parametro del metodo WriteLine . Se si specifica una categoria, il formato dell'Output finestra di messaggio Ŕ "categoria: messaggio." Ad esempio, la prima riga del Dopo il codice visualizza "campo: il nome del prodotto Ŕ Widget" nell'Output finestra:
    Debug.WriteLine("The product name is " + sProdName,"Field");
    Debug.WriteLine("The units on hand are" + iUnitQty,"Field");
    Debug.WriteLine("The per unit cost is" + dUnitCost.ToString(),"Field");
    Debug.WriteLine("Total Cost is  " + (iUnitQty * dUnitCost),"Calc");
  10. La finestra di Output pu˛ visualizzare i messaggi solo se un determinata condizione viene valutata true utilizzando il metodo WriteLineIf della classe Debug . La condizione da valutare Ŕ il primo parametro di input il metodo WriteLineIf . Il secondo parametro di WriteLineIf Ŕ il messaggio viene visualizzato solo se la condizione nel primo parametro restituisce true.
    Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear");
    Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear");
    
  11. Utilizzare il metodo Assert della classe Debug in modo che nella finestra di Output viene visualizzato il solo se messaggio un condizione specificata restituisce false:
    Debug.Assert(dUnitCost > 1, "Message will NOT appear");
    Debug.Assert(dUnitCost < 1, "Message will appear since dUnitcost < 1 is false");
    
  12. Creare gli oggetti TextWriterTraceListener per la finestra di Console (tr1) e un file di testo denominato Txt (tr2), quindi aggiungere ogni oggetto all'insieme dei Listener di Debug :
    TextWriterTraceListener tr1 = new TextWriterTraceListener(System.Console.Out);
    Debug.Listeners.Add(tr1);
            
    TextWriterTraceListener tr2 = new TextWriterTraceListener(System.IO.File.CreateText("Output.txt"));
    Debug.Listeners.Add(tr2);
  13. Per migliorare la leggibilitÓ, utilizzare il metodo Unindent per rimuovere il rientro per i successivi messaggi di Genera classe debug . Quando si utilizzano insieme metodi Riduci rientro e rientro , il lettore Ŕ in grado di distinguere l'output come gruppo.
    Debug.Unindent();
    Debug.WriteLine("Debug Information-Product Ending");
  14. Per assicurarsi che ogni oggetto Listener riceva tutti gli output, chiamare il metodo Flush per i buffer di classe Debug :
    Debug.Flush();

Utilizzando la classe Trace

╚ anche possibile utilizzare la classe Trace per produrre messaggi destinati a controllare l'esecuzione di un applicazione. Le classi Trace e Debug condividono la maggior parte degli stessi metodi per produrre output, tra cui:
  • WriteLine
  • WriteLineIf
  • Rientro
  • Riduci rientro
  • L'asserzione
  • Svuotamento
╚ possibile utilizzare le classi Debug e traccia separatamente o insieme nella stessa applicazione. In un Configurazione di soluzione di progetto, sia Trace e Debug output sono attivi. Il progetto genera output da entrambi Queste classi per tutti gli oggetti Listener . Tuttavia, una configurazione di soluzione rilascio solo per i progetti Genera l'output da una classe di traccia . Il progetto ignora le chiamate di metodo di classe Debug .
Trace.WriteLine("Trace Information-Product Starting ");
Trace.Indent();

Trace.WriteLine("The product name is "+sProdName);
Trace.WriteLine("The product name is"+sProdName,"Field" );
Trace.WriteLineIf(iUnitQty > 50, "This message WILL appear");
Trace.Assert(dUnitCost > 1, "Message will NOT appear");
        
Trace.Unindent();
Trace.WriteLine("Trace Information-Product Ending");

Trace.Flush();

Console.ReadLine();

Verificare che funzioni

  1. Assicurarsi che il Debug Ŕ la configurazione corrente.
  2. Se il Esplora finestra non Ŕ visibile, premere la combinazione di tasti CTRL + ALT + L per visualizzare finestra.
  3. Pulsante destro del mouse conInfo, quindi fare clic suProprietÓ.
  4. Nel riquadro di sinistra della pagina delle proprietÓ di conInfo sotto ilConfigurazione cartella, assicurarsi che la freccia rivolta versoIl debug.

    Nota. In Visual C# 2005 e in Visual C# 2005 Express Edition, fare clic su Eseguire il debug nel conInfo pagina.
  5. Di sopra del Configurazione cartella, nelConfigurazione casella di riepilogo a discesa, fare clic su Attiva (Debug) o Eseguire il debug, quindi fare clic suOK. In Visual C# 2005 e in Visual C# 2005 Express Edition, fare clic su Attiva (Debug) o Eseguire il debug nel Configurazione casella di riepilogo a discesa il Eseguire il debug pagina e quindi scegliere Salva nel File dal menu.
  6. Premere CTRL + ALT + O per visualizzare la finestra di Output.
  7. Premere F5 per eseguire il codice. Quando ilAsserzione non riuscita verrÓ visualizzata la finestra di dialogo, fare clic suIgnora.
  8. Nella finestra della Console, premere INVIO. Il programma deve fine e la finestra di Output verrÓ visualizzato un output simile al seguente
        Debug Information-Product Starting 
        The product name is Widget
        The available units on hand are100
        The per unit cost is 1.03
        System.Xml.XmlDocument
        Field: The product name is Widget
        Field: The units on hand are100
        Field: The per unit cost is1.03
        Calc: Total Cost is  103
        This message WILL appear
        ---- DEBUG ASSERTION FAILED ----
    ---- Assert Short Message ----
    Message will appear since dUnitcost  < 1 is false
    ---- Assert Long Message ----
    
    
        at Class1.Main(String[] args)  <%Path%>\class1.cs(34)
    
        The product name is Widget
        The available units on hand are100
        The per unit cost is 1.03
    Debug Information-Product Ending
    Trace Information-Product Starting 
        The product name is Widget
        Field: The product name isWidget
        This message WILL appear
    Trace Information-Product Ending
                        
    
  9. Dovrebbe essere visualizzata la finestra di Console e il file di output. txt il seguente output:
    The product name is Widget
        The available units on hand are 100
        The per unit cost is 1.03
    Debug Information-Product Ending
    Trace Information-Product Starting 
        The product name is Widget
        Field: The product name is Widget
        This message WILL appear
    Trace Information-Product Ending			
    
Nota. Il file di output. txt si trova nella stessa directory del conInfo eseguibile (conInfo.exe). In genere, questa Ŕ la cartella \bin dove il origine del progetto viene archiviato. Per impostazione predefinita, questa Ŕ C:\Documents and Settings \Utente account di accessoDocuments\Visual studio Projects\conInfo\bin. In Visual C# 2005 e in Visual C# 2005 Express Edition, il file di output. txt si trova nella seguente cartella:
C:\Documents and Settings \Accesso utenteDocuments\Visual studio 2005\Projects\conInfo\conInfo\bin\Debug


Il codice completo Inserzione

   using System;
   using System.Diagnostics;

   class Class1
   {
      [STAThread]
      static void Main(string[] args)
      {
         string sProdName = "Widget";
         int iUnitQty = 100;
         double  dUnitCost = 1.03;
         Debug.WriteLine("Debug Information-Product Starting ");
         Debug.Indent();
         Debug.WriteLine("The product name is "+sProdName);
         Debug.WriteLine("The available units on hand are"+iUnitQty.ToString());
         Debug.WriteLine("The per unit cost is "+ dUnitCost.ToString());

         System.Xml.XmlDocument oxml = new System.Xml.XmlDocument();
         Debug.WriteLine(oxml);

         Debug.WriteLine("The product name is "+sProdName,"Field");
         Debug.WriteLine("The units on hand are"+iUnitQty,"Field");
         Debug.WriteLine("The per unit cost is"+dUnitCost.ToString(),"Field");
         Debug.WriteLine("Total Cost is  "+(iUnitQty * dUnitCost),"Calc");

         Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear");
         Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear");

         Debug.Assert(dUnitCost > 1, "Message will NOT appear");
         Debug.Assert(dUnitCost < 1, "Message will appear since dUnitcost  < 1 is false");

         TextWriterTraceListener tr1 = new TextWriterTraceListener(System.Console.Out);
         Debug.Listeners.Add(tr1);
        
         TextWriterTraceListener tr2 = new TextWriterTraceListener(System.IO.File.CreateText("Output.txt"));
         Debug.Listeners.Add(tr2);
         
 
         Debug.WriteLine("The product name is "+sProdName);
         Debug.WriteLine("The available units on hand are"+iUnitQty);
         Debug.WriteLine("The per unit cost is "+dUnitCost);
         Debug.Unindent();
         Debug.WriteLine("Debug Information-Product Ending");
         Debug.Flush();
         
         Trace.WriteLine("Trace Information-Product Starting ");
         Trace.Indent();

         Trace.WriteLine("The product name is "+sProdName);
         Trace.WriteLine("The product name is"+sProdName,"Field" );
         Trace.WriteLineIf(iUnitQty > 50, "This message WILL appear");
         Trace.Assert(dUnitCost > 1, "Message will NOT appear");
        

         Trace.Unindent();
         Trace.WriteLine("Trace Information-Product Ending");

         Trace.Flush();

         Console.ReadLine();
      }			
   }


Risoluzione dei problemi

  • Se il tipo di configurazione di soluzione Ŕ la versione, il Debug sarÓ ignorato.
  • Dopo aver creato una classe TextWriterTraceListener per una determinata destinazione, TextWriterTraceListener riceve l'output di traccia e le classi Debug . Ci˛ si verifica indipendentemente dal fatto se si utilizza il metodo Add della classe Debug o la traccia per aggiungere la classe di listenerTextWriterTraceListener .
  • Se si aggiunge un oggetto listener per la stessa destinazione la traccia e le classi Debug , ogni riga di output viene duplicato, indipendentemente dal fatto che Eseguire il debug o analisi genera l'output.
             TextWriterTraceListener myWriter = new TextWriterTraceListener(System.Console.Out);
             Debug.Listeners.Add(myWriter);
            
             TextWriterTraceListener myCreator = new TextWriterTraceListener(System.Console.Out);
             Trace.Listeners.Add(myCreator);
             
    

Riferimenti

Per ulteriori informazioni, vedere i seguenti argomenti in .NET Documentazione di libreria di classi del Framework:
Classe Trace
aspx http://msdn2.microsoft.com/en-us/library/System.Diagnostics.Trace (vs.71)

Debug (classe)
aspx http://msdn2.microsoft.com/en-us/library/System.Diagnostics.debug (vs.71)

ProprietÓ

Identificativo articolo: 815788 - Ultima modifica: venerdý 29 marzo 2013 - Revisione: 6.0
Le informazioni in questo articolo si applicano a:
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
Chiavi:á
kbprogramming kbdebug kbnamespace kbhowtomaster kbmt KB815788 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 815788
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com