Modalità di analisi e debug in Visual Basic 2005 o Visual Basic .NET

Per la versione di Microsoft Visual Basic 6.0 di questo articolo, vedere
161153 .

Riepilogo

In questo articolo viene illustrato come utilizzare le classi Trace e Debug . Queste classi sono disponibili nel framework .NET di Microsoft. È possibile utilizzare queste classi per fornire informazioni sulle prestazioni di un'applicazione durante lo sviluppo o dopo la distribuzione nell'ambiente di produzione. Queste classi sono solo una parte degli strumenti disponibili nel framework .NET.

Requisiti

Nell'elenco seguente sono indicati l'hardware consigliato, il software, l'infrastruttura di rete e i service pack necessari:
  • Microsoft Windows 2000 o Microsoft Windows XP
  • Microsoft Visual Basic 2005 o Microsoft Visual Basic .NET
In questo articolo si presuppone che si abbia familiarità con il debug dei programmi.

Descrizione della tecnica

La procedura nella sezione "Creare un campione con la classe Debug" viene illustrato come creare un'applicazione console che utilizza la classe Debug per fornire informazioni sull'esecuzione del programma.

Quando viene eseguito il programma, è possibile utilizzare i metodi della classe Debug per produrre messaggi che consentono di monitorare, il rilevamento dei malfunzionamenti o per fornire le informazioni sulla misurazione delle prestazioni. Per impostazione predefinita, i messaggi che genera la classe Debug vengono visualizzati nella finestra di Output del Microsoft integrato sviluppo ambiente (IDE) Visual Studio.

Nell'esempio di codice viene utilizzato il metodo WriteLine per produrre un messaggio seguito da un terminatore di riga. Quando si utilizza questo metodo per produrre un messaggio, ciascun messaggio viene visualizzato in una riga separata nella finestra di output.

Se si utilizza il metodo Assert della classe Debug , finestra di Output Visualizza un messaggio solo se una condizione specificata restituisce false. Il messaggio viene visualizzato anche nella finestra di dialogo modale per l'utente. Nella finestra di dialogo sono inclusi il messaggio, il nome del progetto e il numero dell'istruzione Assert . La finestra di dialogo include anche tre pulsanti di comando:
  • Abort: interrompe l'applicazione in esecuzione.
  • Retry: l'applicazione passa alla modalità di debug.
  • Ignora: l'applicazione procede.
L'utente deve fare clic su uno di questi pulsanti per procedere con l'esecuzione.

È 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 lo indirizza a una destinazione specificata. Ogni Listener nell'insieme Listeners riceve qualsiasi output che genera la classe Debug . Utilizzare la classe TextWriterTraceListener per definire gli oggetti Listener . È possibile specificare la destinazione per una classe TextWriterTraceListener tramite il relativo costruttore. Alcune destinazioni di output possibili includono:
  • La finestra di Console utilizzando la proprietà System.Console.Out .
  • 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 per ricevere l'output di Debug .

Creare un campione con la classe Debug

  1. Per creare un nuovo progetto applicazione Console denominato conInfo, utilizzare Visual Basic 2005 o Visual Basic .NET. Per impostazione predefinita, un modulo pubblico denominato Module1 viene aggiunto al progetto.
  2. Per inizializzare variabili contenenti informazioni su un prodotto, aggiungere le seguenti istruzioni Dim :
    Dim sProdName As String = "Widget"Dim iUnitQty As Integer = 100
    Dim dUnitCost As Decimal = 1.03

  3. Specificare il messaggio che genera la classe come primo parametro di input del metodo WriteLine . Premere la combinazione di tasti CTRL + ALT + O per assicurarsi che sia visibile nella finestra di Output.
    Debug.WriteLine("Debug Information-Product Starting ")
  4. Per migliorare la leggibilità, utilizzare il metodo di rientro per il rientro dei messaggi successivi nella finestra di Output:
    Debug.Indent()
  5. 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)
    Debug.WriteLine("The per unit cost is " & dUnitCost)

  6. È 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:
    Dim oxml As New System.Xml.XmlDocument()Debug.WriteLine(oxml)

  7. Per organizzare l'output, è possibile includere un parametro di categoria come facoltativo, secondo input del metodo WriteLine . Se si specifica una categoria, il formato del messaggio finestra di Output è "categoria: messaggio." Ad esempio, la prima riga di codice riportato di seguito visualizza "campo: il nome del prodotto sarà Widget" nella finestra di Output:
    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, "Field")
    Debug.WriteLine("Total Cost is" & iUnitQty * dUnitCost, "Calc")

  8. Nella finestra di Output è possibile visualizzare i messaggi solo se una determinata condizione viene valutata true utilizzando il metodo WriteLineIf della classe Debug . La condizione da valutare è il primo parametro di input del metodo WriteLineIf . Il secondo parametro di WriteLineIf è il messaggio che 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")

  9. Utilizzare il metodo della classe Debug Assert in modo che la finestra di Output viene visualizzato il messaggio solo se una condizione specificata restituisce false:
    Debug.Assert(dUnitCost > 1, "Message will NOT appear")Debug.Assert(dUnitCost < 1, "Message will appear")

  10. Creare gli oggetti TextWriterTraceListener della finestra di Console (tr1) e per un file di testo denominato output. txt (tr2) e quindi aggiungere ogni oggetto all'insieme di Listener di Debug :
    Dim tr1 As New TextWriterTraceListener(System.Console.Out)Debug.Listeners.Add(tr1)

    Dim tr2 As New _
    TextWriterTraceListener(System.IO.File.CreateText("Output.txt"))
    Debug.Listeners.Add(tr2)

  11. Per migliorare la leggibilità, utilizzare il metodo Riduci rientro per rimuovere il rientro per i successivi messaggi che il
    Genera classe debug . Quando si utilizzano insieme metodi Riduci rientro e rientro , il Visualizzatore potrà distinguere l'output come gruppo.
    Debug.Unindent()Debug.WriteLine("Debug Information-Product Ending")

  12. Per garantire che ogni oggetto Listener riceve tutto l'output, chiamare il metodo Flush per i buffer di classe Debug :
    Debug.Flush()

Utilizzando la classe Trace

È inoltre possibile utilizzare la classe Trace per produrre messaggi che controllano l'esecuzione di un'applicazione. Le classi Trace e Debug condividono la maggior parte degli stessi metodi per produrre l'output, tra cui:
  • WriteLine
  • WriteLineIf
  • Rientro
  • Riduci rientro
  • L'asserzione
  • Svuotamento
È possibile utilizzare le classi Trace e Debug separatamente o insieme nella stessa applicazione. In un progetto di configurazione di soluzione Debug, traccia e output di Debug sono attivi. Il progetto genera output da entrambe le classi a tutti gli oggetti Listener . Tuttavia, solo il tipo di progetto Release genera output da una classe di traccia . Il progetto di configurazione della soluzione Release 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 Debug sia la configurazione della soluzione attuale.
  2. Se la finestra di Esplora soluzioni non è visibile, premere la combinazione di tasti CTRL + ALT + L per visualizzare questa finestra.
  3. Fare click con il pulsante destro su conInfo e quindi scegliere proprietà.
  4. Nel riquadro di sinistra della pagina delle proprietà conInfo, sotto la cartella di configurazione, assicurarsi che la freccia punti a debug.
  5. Sopra la cartella di configurazione, nella casella di riepilogo a discesa di configurazione , fare clic su Attiva (Debug) o eseguire il Debuge quindi fare clic su OK.
  6. Premere CTRL + ALT + O per visualizzare la finestra di Output.
  7. Premere il tasto F5 per eseguire il codice. Quando viene visualizzata la finestra di dialogo Asserzione non riuscita , fare clic su Ignora.
  8. Nella finestra della Console, premere INVIO. Il programma dovrebbe terminare e nella finestra di Output deve essere visualizzato il seguente output:
    Debug Information-Product Starting 
    The product name is Widget
    The available units on hand are 100
    The per unit cost is 1.03
    System.Xml.XmlDocument
    Field: The product name is Widget
    Field: The units on hand are 100
    Field: The per unit cost is 1.03
    Calc: Total cost is 103
    This message WILL appear
    ---- DEBUG ASSERTION FAILED ----
    ---- Assert Short Message ----
    Message will appear
    ---- Assert Long Message ----

    at Module1.Main() C:\Documents and Settings\Administrator\My
    Documents\Visual Studio Projects\conInfo\Module1.vb(29)

    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

  9. Nella finestra della Console e nel file output.txt deve essere visualizzato il seguente output:
    (The Output.txt file is located in the same directory as the conInfo 
    executable, conInfo.exe. Normally this is the \bin folder of where the
    project source has been stored. By default that would be C:\Documents and
    Settings\User login\My Documents\Visual Studio Projects\conInfo\bin)
    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

Elenco completo del codice

Module Module1    Sub Main()
Dim sProdName As String = "Widget"
Dim iUnitQty As Integer = 100
Dim dUnitCost As Decimal = 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)
Debug.WriteLine("The per unit cost is " & dUnitCost)

Dim oxml As 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, "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")

Dim tr1 As New TextWriterTraceListener(System.Console.Out)
Debug.Listeners.Add(tr1)

Dim tr2 As 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()

End Sub
End Module

Risoluzione dei problemi

  • Se il tipo di configurazione della soluzione Release, 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 che si utilizzi il metodo Add della classe Debug o la traccia per aggiungere la classe di listener TextWriterTraceListener .
  • Se si aggiunge un oggetto Listener per la stessa destinazione la traccia e le classi Debug , ogni riga di output verrà duplicato, indipendentemente dal fatto che
    Eseguire il debug o analisi genera l'output.
    Dim tr1 As New TextWriterTraceListener(System.Console.Out)Debug.Listeners.Add(tr1)
    Dim tr2 As New TextWriterTraceListener(System.Console.Out)
    Trace.Listeners.Add(tr2)

Riferimenti

Per ulteriori informazioni, vedere i seguenti argomenti nella documentazione di.NET Framework Class Library:
Proprietà

ID articolo: 313417 - Ultima revisione: 30 gen 2017 - Revisione: 1

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

Feedback