Bu makalede,
hata ayıklama ve
izleme sınıflarının nasıl kullanılacağını açıklar. Bu sınıflar, Microsoft .NET ile kullanılabilir Framework. Bu sınıflar, uygulama geliştirme sırasında veya üretim için dağıtım sonra uygulama performansı hakkında bilgi sağlamak için kullanabilirsiniz. Bu sınıflar .NET Framework araçları özellikleri yalnızca bir parçasıdır.
Gereksinimler
Aşağıdaki listede, gereksinim duyacağınız donanım, yazılım, ağ altyapısı ve hizmet paketleri önerilmektedir:
- Microsoft Windows 2000 veya Microsoft Windows XP veya Microsoft Windows Server 2003
- Microsoft Visual C#
Bu makalede ayrıca, programda hata ayıklama ile bildiğinizi varsayar.
Teknik of açıklaması
Create a
Sample with the Debug Class </a0> bölümündeki adımları
Debug sınıfı program yürütme hakkında bilgi sağlamak üzere kullandığı bir konsol uygulamasının nasıl oluşturulacağını göstermektedir.
Program çalıştırdığınızda, program yürütme sırası performans ölçüm bilgilerini sağlamak için veya düzgün çalışmamasına algılamaya izlemek için Yardım iletileri üretmek için
hata ayıklama sınıfı yöntemleri kullanabilirsiniz. Varsayılan olarak,
hata ayıklama sınıfı üreten iletileri Visual Studio'nun çıktı penceresinde görünür tümleşik geliştirme ortamı (IDE).
Örnek kod, bir satırı Sonlandırıcı tarafından izlenen bir ileti oluşturmak için
WriteLine yöntemi kullanır. Bir ileti oluşturmak için bu yöntemi kullandığınızda, her iletiyi ayrı bir satırda <a0>Çıktı</a0> penceresinde görüntülenir.
Hata ayıklama sınıfının
Assert yöntemini kullandığınızda, yalnızca belirtilen bir koşul yanlış olarak değerlendirilirse, çıktı penceresi bir ileti görüntüler. Iletinin kullanıcı için kalıcı bir iletişim kutusu görüntülenir. Iletişim kutusunda, iletinin, proje adını ve
Debug.Assert ekstresi numarası içerir. Iletişim kutusunda, aşağıdaki üç komut düğmeleri de içerir:
- Iptal:Uygulamanın çalışmasını durdurur.
- Yeniden deneme:Uygulama hata ayıklama moduna girer.
- Yoksay:Uygulama devam eder.
Kullanıcı uygulama devam etmeden önce bu düğmelerden birini tıklatmanız gerekir.
Destinations (Hedefler) çıktı penceresini farklı sınıf
hata ayıklama çıktısını da yönlendirebilirsiniz.
Hata ayıklama sınıfı
dinleyicisi nesneleri içeren
dinleyiciler adlı sahiptir.
Her
dinleyicisi nesnesi,
hata ayıklama çıkışı izler ve belirli bir hedefi çıktısına yönlendirir.
Her bir
Dinleyicidinleyicisi koleksiyonunda,
Debug sınıfı ürettiği herhangi bir çıktı alır. Sınıf
olmalıdır,
Dinleyici nesneleri tanımlamak için kullanın. Sınıf
olmalıdır, Oluşturucu ile hedefi belirtebilirsiniz.
Bazı olası çıktı hedefi şunlardır:
- System.Console.Out özelliğini kullanarak konsol penceresi.
- System.IO.File.CreateText("FileName.txt") deyimini kullanarak BIR metin (.txt) dosyası.
Bir
olmalıdır nesnesi oluşturduktan sonra hata ayıklama çıkışı almaya
Debug.listeners derlemesine nesneyi eklemeniz gerekir.
Ile <a2>debug</a2> sınıf örneği oluşturma
- Visual Studio ya da Visual C# Express Edition'ı başlatın.
- ConInfo adlı yeni bir Visual C# Console Application projesi oluşturun. Class1, Visual Studio. NET'te oluşturulur. Visual Studio 2005'te, program.cs oluşturulur.
- Üst Class1 veya program.cs
using System.Diagnostics;
aşağıdaki ad alanını ekleyin. - Bir ürünle ilgili bilgiler içerecek biçimde değişkenlerini başlatmak için <a0></a0>, Main yöntemi için aşağıdaki bildirim deyimleri ekleyin:
string sProdName = "Widget";
int iUnitQty = 100;
double dUnitCost = 1.03;
- Ileti sınıfı üreten WriteLine yönteminin giriş ilk parametresi olarak belirtin. Output penceresi görünür olduğundan emin olmak için CTRL + ALT + S tuş birleşimine basın.
Debug.WriteLine("Debug Information-Product Starting "); - Okunabilir olması için sonraki iletileri <a0>Çıktı</a0> penceresinde girintilemek için Girinti yöntemi kullanın:
- Seçili değişkenlerinin içeriğini görüntülemek için <a0></a0>, WriteLine yöntemi aşağıdaki gibi kullanın:
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()); - WriteLine yöntemi, ad ve varolan bir nesnenin sınıf adı'nı görüntülemek için de kullanabilirsiniz. Örneğin, aşağıdaki kodu, çıkış penceresinde System.Xml.XmlDocument ad boşluğunu görüntüler:
System.Xml.XmlDocument oxml = new System.Xml.XmlDocument();
Debug.WriteLine(oxml);
- Çıktı düzenlemek için <a0></a0>, ikinci giriş kategori olarak bir isteğe bağlı, parametre WriteLine yönteminin içerebilir. Bir kategori biçimi belirtirseniz, çıktısını, pencere iletisidir "Kategori: iletinin." Örneğin aşağıdaki kodu ilk satırı görüntüler "alan: pencere öğesi ürün adı olduğu" çıktı penceresini:
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"); - Yalnızca belirtilen bir koşul doğru olarak hata ayıklama sınıfının WriteLineIf yöntemini kullanarak değerlendirilirse, çıktı penceresi iletileri görüntüleyebilirsiniz. Değerlendirilecek koşul WriteLineIf yönteminin ilk giriş parametresidir. Ikinci parametre WriteLineIf, yalnızca ilk parametresinde koşul doğru olarak değerlendirilirse, görüntülenen iletisidir.
Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear");
Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear");
- Hata ayıklama sınıfının Assert yöntemini kullanabilir, böylece yalnızca belirtilen bir koşul yanlış olarak değerlendirilirse Output penceresi, iletiyi görüntüler:
Debug.Assert(dUnitCost > 1, "Message will NOT appear");
Debug.Assert(dUnitCost < 1, "Message will appear since dUnitcost < 1 is false");
- Konsol penceresi (tr1) ve <a1>Output.txt</a1> (tr2) adlı bir metin dosyası için olmalıdır nesneleri oluşturmak ve her nesnenin Debug dinleyiciler derlemesine ekleyin:
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); - Okunabilir olması için Debug sınıfı oluşturur, izleyen iletiler için girintiyi kaldırmak için Unindent yöntemini kullanın. Azalt ve Unindent yöntemleri kullandığınızda, okuyucu çıkış grubunu.
Debug.Unindent();
Debug.WriteLine("Debug Information-Product Ending"); ayırt - Tüm çıktıyı her dinleyicisi nesne almasını sağlamak için <a0></a0>, hata ayıklama sınıfı arabellekleri için Flush yöntemi çağrısı:
Izleme sınıf'ı kullanma
Izleme sınıfı iletileri oluşturmak için bu uygulamanın yürütülmesi monitör de kullanılabilir.
Izleme ve
hata ayıklama sınıfları, aşağıdakiler de dahil olmak üzere bir çıktı oluşturmak için aynı yöntemlerin çoğu Paylaştır:
- Console.WriteLine
- WriteLineIf
- Girinti
- Unindent
- Onaylama işlemi
- Temizleme
Izleme ve
hata ayıklama sınıfları ayrı ayrı veya birlikte aynı uygulamada kullanabilirsiniz. Hata ayıklama Solution yapılandırma projesinde,
izleme hem de
hata ayıklama çıkışı etkindir. Proje çıkış her ikisini de bu sınıfların tüm
dinleyicisi nesneleri oluşturur. Ancak bir yayın Solution yapılandırma proje
izleme bir sınıftan yalnızca çıktı oluşturur.
Hata ayıklama sınıf yöntemi etkinleştirilmelerinde Release Solution yapılandırma proje 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();
It Works That doğrulayın.
- Hata ayıklama geçerli çözüm yapılandırması olduğundan emin olun.
- Solution Explorer (Çözüm Gezgini) penceresinde görünür durumda değilse, bu pencereyi görüntülemek için CTRL + ALT + N tuş birleşimine basın.
- ConInfo ' ı sağ tıklatın ve sonra da Properties ' i tıklatın.
- ConInfo özellik sayfasındaki yapılandırma klasörü altında sol bölmede oku, hata ayıklama için işaret ettiğinden emin olun.
NotDebug, Visual C# 2005 ve Visual C# 2005 Express Edition conInfo sayfayı tıklatın. - Yapılandırma açılan - listesinde aşağı yapılandırma klasörün üstünde tıklatın Active (hata ayıklama) veya hata ayıklama ve Tamam ' ı tıklatın. Visual C# 2005 ve Visual C# 2005 Express Edition Debughata ayıklama sayfasında <a1>yapılandırma</a1> a?a?? aç?lan liste kutusunda <a0><a1>Etkin</a1> (hata ayıklama) veya</a0>'ı tıklatın ve sonra Dosya menüsünde Kaydet ' i tıklatın.
- Çıktı penceresini görüntülemek için CTRL + ALT + O tuşlarına basın.
- Kodu çalıştırmak için F5 tuşuna basın. Onaylama işlemi başarısız iletişim kutusu görüntülendiğinde, Yoksay ' ı tıklatın.
- Konsol penceresinde, ENTER tuşuna basın. Program bitiş ve çıktı penceresinde aşağıdakine benzer bir çıktı görüntülemelidir
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
- Konsol penceresi ve Output.txt dosyasını aşağıdaki çıktıyı görüntülenmelidir:
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
Not Output.txt dosya conInfo yürütülebilir (conInfo.exe) ile aynı dizinde bulunur. Genellikle, bu projenin kaynak nerede depolandığını \bin klasördür. Varsayılan olarak, bu, C:\Documents and Settings\
User
login Documents\Microsoft Studio Projects\conInfo\bin. Visual C# 2005 ve Visual C# 2005 Express Edition Output.txt dosyası aşağıdaki klasörde bulunur:
C:\Documents and Settings\ User login Documents\Microsoft Studio 2005\Projects\conInfo\conInfo\bin\Debug
Kod tamamlamak listesi
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();
}
}Sorun Giderme
- Çözüm yapılandırma türü Release ise, Debug sınıfı çıkış göz ardı edilir.
- Belirli bir hedef için bir olmalıdır sınıfı oluşturduktan sonra izleme ve hata ayıklama sınıfları olmalıdır çıkış alır. Bu, izleme veya hata ayıklama sınıfı, <a2>Add</a2> yöntemini olmalıdırdinleyiciler sınıfına eklemek için kullanıp bağımsız olarak gerçekleşir.
- Izleme ve hata ayıklama sınıfları için aynı hedef bir dinleyiciler nesnesi eklerseniz, olup hata ayıklama veya izleme çıkışı oluşturur bağımsız olarak her çıktı satırının yineleniyor.
TextWriterTraceListener myWriter = new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(myWriter);
TextWriterTraceListener myCreator = new TextWriterTraceListener(System.Console.Out);
Trace.Listeners.Add(myCreator);