Visual Basic .NET'te İzleme ve Hata Ayıklama sınıflarını kullanma

Bu makalede, Visual Basic .NET'te ve sınıflarının Trace nasıl kullanılacağı Debug hakkında bilgi sağlanır.

Orijinal ürün sürümü: Visual Basic .NET
Özgün KB numarası: 313417

Özet

Bu makalede ve sınıflarının Debug nasıl kullanılacağı gösterilmektedir Trace . Bu sınıflar Microsoft .NET Framework'nde kullanılabilir. Uygulama geliştirme sırasında veya üretime dağıtımdan sonra uygulamanın performansı hakkında bilgi sağlamak için bu sınıfları kullanabilirsiniz. Bu sınıflar, .NET Framework kullanılabilen izleme özelliklerinin yalnızca bir parçasıdır.

Gereksinimler

Aşağıdaki listede ihtiyacınız olan önerilen donanım, yazılım, ağ altyapısı ve hizmet paketleri özetlenmiştir:

  • Windows
  • Visual Basic .NET

Bu makalede, program hata ayıklama hakkında bilgi sahibi olduğunuz da varsayılır.

Tekniğin açıklaması

Hata ayıklama sınıfıyla örnek oluşturma bölümündeki adımlar, program yürütme hakkında bilgi sağlamak için sınıfını kullanan Debug bir konsol uygulamasının nasıl oluşturulacağını gösterir.

Program çalıştırıldığında, izlemenize, arızaları Debug algılamanıza veya performans ölçümü bilgileri sağlamaya yardımcı olan iletiler üretmek için sınıfının yöntemlerini kullanabilirsiniz. Varsayılan olarak, sınıfın Debug ürettiği iletiler Microsoft Visual Studio Tümleşik Geliştirme Ortamı'nın (IDE) Çıkış penceresinde görünür.

Örnek kod, bir satır sonlandırıcısı tarafından izlenen bir ileti oluşturmak için yöntemini kullanır WriteLine . İleti oluşturmak için bu yöntemi kullandığınızda, her ileti Çıkış penceresinde ayrı bir satırda görüntülenir.

sınıfının yöntemini Debug kullanırsanızAssert, Çıkış penceresi yalnızca belirtilen bir koşul false olarak değerlendirilirse bir ileti görüntüler. İleti, kullanıcıya kalıcı bir iletişim kutusunda da görünür. İletişim kutusu iletiyi, proje adını ve Debug.Assert deyim numarasını içerir. İletişim kutusunda üç komut düğmesi de bulunur:

  • Durdur: Uygulama çalışmayı durduruyor.
  • Yeniden deneyin: Uygulama hata ayıklama moduna girer.
  • Yoksay: Uygulama devam eder. Uygulamanın devam etmesi için kullanıcının bu düğmelerden birine tıklaması gerekir.

Ayrıca, çıktıyı sınıfından Debug Çıkış penceresi dışındaki hedeflere de yönlendirebilirsiniz. sınıfı, Debug Dinleyici nesnelerini içeren adlı Listeners bir koleksiyona sahiptir. Her Dinleyici nesnesi çıkışı izler Debug ve çıkışı belirtilen hedefe yönlendirir. Koleksiyondaki Listeners her Dinleyici, sınıfın Debug oluşturduğu tüm çıkışları alır. TextWriterTraceListener Dinleyici nesnelerini tanımlamak için sınıfını kullanın. Bir sınıfın hedefini TextWriterTraceListener oluşturucu aracılığıyla belirtebilirsiniz. Bazı olası çıkış hedefleri şunlardır:

  • özelliğini kullanarak System.Console.Out Konsol penceresi.
  • deyimini kullanarak bir System.IO.File.CreateText("FileName.txt")) metin dosyası.

Bir TextWriterTraceListener nesne oluşturduktan sonra, çıktı almak Debug için Debug.Listeners nesnesini koleksiyona eklemeniz gerekir.

Debug sınıfıyla örnek oluşturma

  1. Visual Basic .NET kullanarak conInfo adlı yeni bir Konsol Uygulaması projesi oluşturun. Adlı Module1 bir genel modül varsayılan olarak projeye eklenir.

  2. Bir ürün hakkında bilgi içerecek değişkenleri başlatmak için aşağıdaki Dim deyimleri ekleyin:

    Dim sProdName As String = "Widget"
    Dim iUnitQty As Integer = 100
    Dim dUnitCost As Decimal = 1.03
    
  3. sınıfının yönteminin ilk giriş parametresi WriteLine olarak ürettiği iletiyi belirtin. Çıkış penceresinin görünür olduğundan emin olmak için CTRL+ALT+O tuş bileşimine basın.

    Debug.WriteLine("Debug Information-Product Starting ")
    
  4. Okunabilirlik için, Çıkış penceresinde sonraki iletileri girintili yapmak için yöntemini kullanın Indent :

    Debug.Indent()
    
  5. Seçili değişkenlerin içeriğini görüntülemek için yöntemini aşağıdaki gibi kullanın WriteLine :

    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. Mevcut bir nesnenin WriteLine ad alanını ve sınıf adını görüntülemek için yöntemini de kullanabilirsiniz. Örneğin, aşağıdaki kod Çıkış penceresinde ad alanını görüntüler System.Xml.XmlDocument :

    Dim oxml As New System.Xml.XmlDocument()
    Debug.WriteLine(oxml)
    
  7. Çıkışı düzenlemek için, yönteminin isteğe bağlı, ikinci giriş parametresi WriteLine olarak bir kategori ekleyebilirsiniz. Bir kategori belirtirseniz, Çıkış penceresi iletisinin biçimi "category: message" olur. Örneğin, aşağıdaki kodun ilk satırında Çıkış penceresinde "Alan: Ürün adı Pencere Öğesidir" ifadesi görüntülenir:

    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. Çıkış penceresi iletileri yalnızca belirlenmiş bir koşul sınıfın yöntemini Debug kullanarak WriteLineIf true olarak değerlendiriyorsa görüntüleyebilir. Değerlendirilecek koşul, yöntemin ilk giriş parametresidir WriteLineIf . İkinci parametresi WriteLineIf , yalnızca ilk parametredeki koşul true olarak değerlendirilirse görüntülenen iletidir.

    Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear")
    Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear")
    
  9. Çıkış penceresinin Debug yalnızca belirtilen bir koşul false olarak değerlendirilirse iletiyi görüntülemesi için sınıfının Assert yöntemini kullanın:

    Debug.Assert(dUnitCost > 1, "Message will NOT appear")
    Debug.Assert(dUnitCost < 1, "Message will appear")
    
  10. TextWriterTraceListener Konsol penceresi () ve Output.txt ()tr2tr1 adlı bir metin dosyası için nesneleri oluşturun ve ardından her nesneyi koleksiyona DebugListeners ekleyin:

    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. Okunabilirlik için yöntemini kullanarak Unindent sınıfın oluşturduğu sonraki iletilerin girintisini Debug kaldırın. ve Unindent yöntemlerini birlikte kullandığınızdaIndent, okuyucu çıkışı grup olarak ayırt edebilir.

    Debug.Unindent()
    Debug.WriteLine("Debug Information-Product Ending")
    
  12. Her Dinleyici nesnesinin tüm çıkışını aldığından emin olmak için sınıf arabellekleri için yöntemini çağırın FlushDebug :

    Debug.Flush()
    

Trace sınıfını kullanma

Bir uygulamanın yürütülmesini Trace izleyen iletiler oluşturmak için sınıfını da kullanabilirsiniz. Trace ve Debug sınıfları, aşağıdakiler dahil olmak üzere çıkış üretmek için aynı yöntemlerin çoğunu paylaşır:

  • WriteLine
  • WriteLineIf
  • Indent
  • Unindent
  • Assert
  • Flush

ve sınıflarını TraceDebug aynı uygulamada ayrı ayrı veya birlikte kullanabilirsiniz. Hata Ayıklama Çözümü Yapılandırması projesinde hem hem Debug de Trace çıkış etkindir. Proje, bu sınıfların her ikisinden de tüm Dinleyici nesnelerine çıkış oluşturur. Ancak, Bir Sürüm Çözümü Yapılandırması projesi yalnızca bir Trace sınıftan çıkış oluşturur. Release Solution Configuration projesi tüm Debug sınıf yöntemi çağrılarını yoksayar.

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()

Çalıştığını doğrulayın

  1. Hata Ayıklama'nın geçerli çözüm yapılandırması olduğundan emin olun.

  2. Çözüm Gezgini penceresi görünmüyorsa, bu pencereyi görüntülemek için CTRL+ALT+L tuş bileşimine basın.

  3. conInfo'ya sağ tıklayın ve ardından Özellikler'e tıklayın.

  4. conInfo özellik sayfasının sol bölmesindeki Yapılandırma klasörünün altında okun Hata Ayıklama'yı gösterdiğinden emin olun.

  5. Yapılandırma klasörünün üst kısmındaki Yapılandırma açılan liste kutusunda Etkin (Hata Ayıkla) veya Hata Ayıkla'ya ve ardından Tamam'a tıklayın.

  6. Çıkış penceresini görüntülemek için CTRL+ALT+O tuşlarına basın.

  7. Kodu çalıştırmak için F5 tuşuna basın. Onaylama Başarısız oldu iletişim kutusu görüntülendiğinde Yoksay'a tıklayın.

  8. Konsol penceresinde ENTER tuşuna basın. Program bitmeli ve Çıkış penceresi aşağıdaki çıkışı göstermelidir:

    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. Konsol penceresi ve Output.txt dosyası aşağıdaki çıkışı göstermelidir:

    (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
    

Tam kod listesi

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 TextWriter`Trace`Listener(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

Sorun giderme

  • Çözüm yapılandırma türü Release ise, Debug sınıf çıkışı yoksayılır.

  • Belirli bir hedef için bir TextWriterTraceListener sınıf oluşturduktan sonra ve TextWriterTraceListenerDebug sınıflarından Trace çıkış alır. Bu, sınıfına eklemek için veya Debug sınıfının yöntemini Trace kullanıp kullanmadığınızdan AddListeners bağımsız olarak TextWriterTraceListener gerçekleşir.

  • ve Debug sınıflarında Trace aynı hedef için bir Dinleyici nesnesi eklerseniz, çıkışı oluşturup oluşturmadığına DebugTrace bakılmaksızın her çıkış satırı yinelenir.

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

Başvurular