JAK: Klasy Trace i Debug w programie Visual Basic .NET

Tłumaczenia artykułów Tłumaczenia artykułów
Numer ID artykułu: 313417 - Zobacz jakich produktów dotyczą zawarte w tym artykule porady.
Ten artykuł został opublikowany wcześniej pod numerem PL313417
Rozwiń wszystko | Zwiń wszystko

Na tej stronie

Streszczenie

W tym artykule pokazano, jak używać klas Debug i Trace. Są one dostępne w architekturze Microsoft .NET Framework. Tych klas można używać do dostarczania informacji o wydajności aplikacji podczas projektowania aplikacji lub po jej wdrożeniu. Te klasy to tylko część funkcji instrumentacji dostępnych w architekturze .NET Framework.

Wymagania

Oto lista wymaganych elementów, takich jak sprzęt, oprogramowanie, infrastruktura sieci i dodatki Service Pack:
  • System Microsoft Windows 2000 lub Microsoft Windows XP
  • Program Microsoft Visual Basic .NET
W artykule założono również, że czytelnik umie debugować programy.

Opis techniki

Procedura z sekcji Tworzenie przykładu z klasą Debug pokazuje, jak utworzyć aplikację konsoli, która używa klasy Debug do dostarczenia informacji o wykonywaniu programu.

Gdy program jest uruchomiony, metod klasy Debug można używać do generowania komunikatów, które pomagają w monitorowaniu działania programu i wykrywaniu błędów lub podają informacje statystyczne dotyczące wydajności. Domyślnie komunikaty generowane przez klasę Debug pojawiają się w oknie Output interfejsu Visual Studio Integrated Development Environment (IDE).

W kodzie przykładowym używana jest metoda WriteLine do wygenerowania komunikatu, po którym następuje terminator wiersza. Jeśli do generowania komunikatów jest używana ta metoda, każdy komunikat pojawia się w osobnym wierszu w oknie Output.

Jeśli użyje się metody Assert klasy Debug, komunikat w oknie Output jest wyświetlany tylko wtedy, gdy określony warunek jest fałszywy. Ponadto komunikat pojawia się w modalnym oknie dialogowym. Okno dialogowe zawiera komunikat, nazwę projektu i numer instrukcji Debug.Assert. Zawiera ono również następujące przyciski poleceń:
  • Abort: Zatrzymuje działanie aplikacji.
  • Retry: Wprowadza aplikację w tryb debugowania.
  • Ignore: Aplikacja kontynuuje działanie.
Aby aplikacja mogła kontynuować działanie, użytkownik musi kliknąć jeden z tych przycisków.

Dane wyjściowe klasy Debug można również skierować w inne miejsce docelowe niż okno Output. Klasa Debug obejmuje kolekcję o nazwie Listeners, która zawiera obiekt Listener. Każdy obiekt Listener monitoruje dane wyjściowe klasy Debug i kieruje je w określone miejsce docelowe. Każdy obiekt Listener w kolekcji Listeners odbiera wszelkie dane wyjściowe wygenerowane przez klasę Debug. Do określenia obiektów Listener użyj klasy TextWriterTraceListener. Miejsce docelowe klasy TextWriterTraceListener można określić przy użyciu jej konstruktora. Do niektórych możliwych miejsc docelowych danych wyjściowych należą:
  • Okno Console w przypadku użycia właściwości System.Console.Out.
  • Plik tekstowy (.txt) w przypadku użycia instrukcji System.IO.File.CreateText("NazwaPliku.txt")).
Aby odbierać dane wyjściowe klasy Debug, po utworzeniu obiektu TextWriterTraceListener należy dodać ten obiekt do kolekcji Debug.Listeners.

Tworzenie przykładu z klasą Debug

  1. Otwórz program Visual Studio .NET.
  2. W programie Visual Basic .NET utwórz nowy projekt aplikacji konsoli o nazwie conInfo. Domyślnie do projektu zostaje dodany moduł o nazwie Module1.
  3. Aby zainicjować zmienne, które będą zawierać informacje o produkcie, dodaj następujące instrukcje Dim:
    Dim sProdName As String = "Widget"
    Dim iUnitQty As Integer = 100
    Dim dUnitCost As Decimal = 1.03
  4. Określ generowany przez klasę komunikat jako pierwszy parametr wejściowy metody WriteLine. Naciśnij klawisze CTRL+ALT+O, aby upewnić się, że okno Output będzie widoczne.
    Debug.WriteLine("Początek informacji klasy Debug o produkcie")
  5. Dla zwiększenia czytelności użyj metody Indent w celu wcięcia kolejnych komunikatów w oknie Output:
    Debug.Indent()
  6. Aby wyświetlić zawartość wybranych zmiennych, użyj metody WriteLine, jak następuje:
    Debug.WriteLine("Nazwa produktu: " & sProdName)
    Debug.WriteLine("Liczba dostępnych jednostek: " & iUnitQty)
    Debug.WriteLine("Koszt jednostkowy: " & dUnitCost)
  7. Metody WriteLine można również użyć do wyświetlenia obszaru nazw i nazwy klasy istniejącego obiektu. Na przykład następujący kod wyświetla w oknie Output obszar nazw System.Xml.XmlDocument:
    Dim oxml As New System.Xml.XmlDocument()
    Debug.WriteLine(oxml)
  8. Aby uporządkować dane wyjściowe, można również dołączyć kategorię jako opcjonalny, drugi parametr wyjściowy metody WriteLine. Jeśli określi się kategorię, format komunikatu w oknie Output jest następujący „kategoria: komunikat”. Na przykład pierwszy wiersz następującego kodu wyświetla w oknie Output tekst „Pole: Nazwa produktu: Widget”:
    Debug.WriteLine("Nazwa produktu: " & sProdName, "Pole")
    Debug.WriteLine("Liczba jednostek: " & iUnitQty, "Pole")
    Debug.WriteLine("Koszt jednostkowy: " & dUnitCost, "Pole")
    Debug.WriteLine("Całkowity koszt:" & iUnitQty * dUnitCost, "Obl")
  9. Komunikat w oknie Output może być również wyświetlany tylko wtedy, gdy określony warunek jest prawdziwy; należy w tym celu użyć metody WriteLineIf klasy Debug. Warunek, który ma być sprawdzony, jest pierwszym parametrem wejściowym metody WriteLineIf. Drugim parametrem metody WriteLineIf jest komunikat, który pojawia się, jeśli warunek w pierwszym parametrze jest prawdziwy.
    Debug.WriteLineIf(iUnitQty > 50, "Ten komunikat SIĘ POJAWIA")
    Debug.WriteLineIf(iUnitQty < 50, "Ten komunikat SIĘ NIE POJAWIA")
  10. Użyj metody Assert klasy Debug, aby komunikat w oknie Output był wyświetlany tylko w przypadku, gdy określony warunek jest fałszywy:
    Debug.Assert(dUnitCost > 1, "Ten komunikat SIĘ NIE POJAWIA")
    Debug.Assert(dUnitCost < 1, "Ten komunikat SIĘ POJAWIA")
  11. Utwórz obiekty TextWriterTraceListener dla okna Console (tr1) i dla pliku tekstowego o nazwie Output.txt (tr2), a następnie dodaj każdy z tych obiektów do kolekcji Debug Listeners:
    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)
  12. Aby zwiększyć czytelność, użyj metody Unindent w celu usunięcia wcięć kolejnych komunikatów generowanych przez klasę Debug. Jeśli użyjesz metod Indent i Unindent razem, użytkownik będzie mógł odróżnić dane wyjściowe jako grupę.
    Debug.Unindent()
    Debug.WriteLine("Koniec informacji klasy Debug o produkcie")
  13. Aby zapewnić, że każdy obiekt Listener odbiera wszystkie swoje dane wyjściowe, wywołaj metodę Flush dla buforów klasy Debug:
    Debug.Flush()

Korzystanie z klasy Trace

Do generowania komunikatów, które monitorują wykonywanie aplikacji, można również używać klasy Trace. Klasy Trace i Debug w większości do generowania danych wyjściowych używają wspólnych metod, takich jak:
  • WriteLine
  • WriteLineIf
  • Indent
  • Unindent
  • Assert
  • Flush
Klas Trace i Debug można używać osobno lub razem w tej samej aplikacji. W projekcie Debug Solution Configuration są aktywne zarówno dane wyjściowe klasy Trace, jak i Debug. Program generuje dane wyjściowe z obu tych klas i przekazuje je do wszystkich obiektów Listener. Projekt Release Solution Configuration generuje dane wyjściowe tylko z klasy Trace. Projekt Release Solution Configuration ignoruje wszelkie wywołania metod klasy Debug.
Trace.WriteLine("Początek informacji klasy Trace o produkcie")

Trace.Indent()

Trace.WriteLine("Nazwa produktu: " & sProdName)
Trace.WriteLine("Nazwa produktu: " & sProdName, "Pole")
Trace.WriteLineIf(iUnitQty > 50, "Ten komunikat SIĘ POJAWIA")
Trace.Assert(dUnitCost > 1, "Ten komunikat SIĘ NIE POJAWIA")

Trace.Unindent()
Trace.WriteLine("Koniec informacji klasy Trace o produkcie")
Trace.Flush()
Console.ReadLine()

Testowanie kodu

  1. Upewnij się, że bieżącą konfiguracją rozwiązania jest Debug.
  2. Jeśli okno Solution Explorer jest niewidoczne, naciśnij klawisze CTRL+ALT+L, aby je wyświetlić.
  3. Kliknij prawym przyciskiem myszy projekt conInfo, a następnie kliknij polecenie Properties.
  4. Upewnij się, że strzałka w lewym okienku strony właściwości projektu conInfo, w folderze Configuration wskazuje tryb Debugging.
  5. Powyżej folderu Configuration, na liście rozwijanej Configuration kliknij pozycję Active (Debug) lub Debug, a następnie kliknij przycisk OK.
  6. Naciśnij klawisze CTRL+ALT+O, aby wyświetlić okno Output.
  7. Naciśnij klawisz F5, aby uruchomić kod. Po pojawieniu się okna dialogowego Assertion Failed kliknij przycisk Ignore.
  8. W oknie Console naciśnij klawisz ENTER. Wykonywanie programu powinno się zakończyć, a w oknie Output powinny zostać wyświetlone następujące dane wyjściowe:
    Początek informacji klasy Debug o produkcie 
        Nazwa produktu: Widget
        Liczba dostępnych jednostek: 100
        Koszt jednostkowy: 1.03
        System.Xml.XmlDocument
        Pole: Nazwa produktu: Widget
        Pole: Liczba jednostek: 100
        Pole: Koszt jednostkowy: 1.03
        Obl: Całkowity koszt: 103
        Ten komunikat SIĘ POJAWIA
        ---- DEBUG ASSERTION FAILED ----
    ---- Assert Short Message ----
    Komunikat się pojawia
    ---- Assert Long Message ----
    
        at Module1.Main()  C:\Documents and Settings\Administrator\My 
        Documents\Visual Studio Projects\conInfo\Module1.vb(29)
    
        Nazwa produktu: Widget
        Liczba dostępnych jednostek: 100
        Koszt jednostkowy: 1.03
    Początek informacji klasy Debug o produkcie
    Początek informacji klasy Trace o produkcie 
        Nazwa produktu: Widget
        Pole: Nazwa produktu: Widget
        Ten komunikat SIĘ POJAWIA
    Koniec informacji klasy Trace o produkcie
  9. W oknie Console i w pliku Output.txt powinny pojawić się następujące dane wyjściowe:
    (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)
        Nazwa produktu: Widget
        Liczba dostępnych jednostek: 100
        Koszt jednostkowy: 1.03
    Początek informacji klasy Debug o produkcie
    Początek informacji klasy Trace o produkcie 
        Nazwa produktu: Widget
        Pole: Nazwa produktu: Widget
        Ten komunikat SIĘ POJAWIA
    Koniec informacji klasy Trace o produkcie

Pełny kod

Module Module1
    Sub Main()
        Dim sProdName As String = "Widget"
        Dim iUnitQty As Integer = 100
        Dim dUnitCost As Decimal = 1.03

        Debug.WriteLine("Początek informacji klasy Debug o produkcie")
        Debug.Indent()

        Debug.WriteLine("Nazwa produktu: " & sProdName)
        Debug.WriteLine("Liczba dostępnych jednostek: " & iUnitQty)
        Debug.WriteLine("Koszt jednostkowy: " & dUnitCost)

        Dim oxml As New System.Xml.XmlDocument()
        Debug.WriteLine(oxml)

        Debug.WriteLine("Nazwa produktu: " & sProdName, "Pole")
        Debug.WriteLine("Liczba jednostek: " & iUnitQty, "Pole")
        Debug.WriteLine("Koszt jednostkowy: " & dUnitCost, "Pole")
        Debug.WriteLine("Całkowity koszt: " & iUnitQty * dUnitCost, "Obl")

        Debug.WriteLineIf(iUnitQty > 50, "Ten komunikat SIĘ POJAWIA")
        Debug.WriteLineIf(iUnitQty < 50, "Ten komunikat SIĘ NIE POJAWIA")

        Debug.Assert(dUnitCost > 1, "Ten komunikat SIĘ NIE POJAWIA")
        Debug.Assert(dUnitCost < 1, "Ten komunikat SIĘ POJAWIA")

        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("Nazwa produktu: " & sProdName)
        Debug.WriteLine("Liczba dostępnych jednostek: " & iUnitQty)
        Debug.WriteLine("Koszt jednostkowy: " & dUnitCost)

        Debug.Unindent()
        Debug.WriteLine("Początek informacji klasy Debug o produkcie")

        Debug.Flush()

        Trace.WriteLine("Początek informacji klasy Trace o produkcie")

        Trace.Indent()

        Trace.WriteLine("Nazwa produktu: " & sProdName)
        Trace.WriteLine("Nazwa produktu: " & sProdName, "Pole")
        Trace.WriteLineIf(iUnitQty > 50, "Ten komunikat SIĘ POJAWIA")
        Trace.Assert(dUnitCost > 1, "Ten komunikat SIĘ NIE POJAWIA")

        Trace.Unindent()
        Trace.WriteLine("Koniec informacji klasy Trace o produkcie")

        Trace.Flush()

        Console.ReadLine()

    End Sub
End Module

Rozwiązywanie problemów

  • Jeśli typem konfiguracji rozwiązania jest Release, dane wyjściowe klasy Debug są ignorowane.
  • Po utworzeniu klasy TextWriterTraceListener dla określonego miejsca docelowego obiekt TextWriterTraceListener odbiera dane wyjściowe z klas Trace i Debug. Dzieje się tak niezależnie od tego, czy użyje się metody Add klasy Trace czy klasy Debug w celu dodania obiektu TextWriterTraceListener do klasy Listeners.
  • Jeśli doda się obiekt Listener dla tego samego miejsca docelowego w klasie Trace i w klasie Debug, każdy wiersz danych wyjściowych będzie duplikowany, niezależnie od tego, czy dane wyjściowe generuje klasa Debug czy Trace.
    Dim tr1 As New TextWriterTraceListener(System.Console.Out)
    Debug.Listeners.Add(tr1)
    Dim tr2 As New TextWriterTraceListener(System.Console.Out)
    Trace.Listeners.Add(tr2)

Materiały referencyjne

Aby uzyskać więcej informacji, zobacz następujące tematy w dokumentacji biblioteki klas architektury .NET Framework:
Trace Class
http://msdn2.microsoft.com/en-us/library/system.diagnostics.trace(vs.71).aspx

Debug Class
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDiagnosticsDebugClassTopic.asp
Aby uzyskać więcej informacji dotyczących śledzenia, zobacz następujące tematy w samouczkach Microsoft GotDotNet Quickstart:
How Do I Work with tracing?
http://samples.gotdotnet.com/quickstart/howto/doc/Trace.aspx

How Do I Instrument a small application with tracing? http://samples.gotdotnet.com/quickstart/howto/doc/TraceDemo.aspx





Właściwości

Numer ID artykułu: 313417 - Ostatnia weryfikacja: 13 maja 2007 - Weryfikacja: 1.3
Informacje zawarte w tym artykule dotyczą:
  • Microsoft Visual Basic .NET 2002 Standard Edition
Słowa kluczowe: 
kbdebug kbhowto kbhowtomaster KB313417

Przekaż opinię

 

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