Nedir Bu Debug ve trace?
Debug ve trace sınıfları uygulamamızı geliştiriken veya çalışma aşamasında bilgi mesajları vermemizi sağlar.System.Diagnostics ad alanında bulunurlar. Visual Studio nun output bölümünde çıktıları görüntülenir. Ayrıca çıktılar listener e gönderilir.Debug ve Trace in listeneri aynıdır.
Debug Sınıfı uygulamaları debug modda derlenirken ,trace sınıfı ise hem debug hem release modda derlenen uygulamalarda kullanılır.
Debug ve trace sınıfının metodları:
Write : Verilen metni Listeners koleksiyonuna yazar.
WriteLine : Verilen metni Listeners koleksiyonuna yazar. Ve bir alt satıra geçer.
WriteIf: Eğer verilen Boolean koşulu True değerini taşıyor ise metni Listeners koleksiyonuna yazar.
WriteLineIf: Eğer verilen Boolean koşulu True değerini taşıyor ise metni Listeners koleksiyonuna yazar. Ve bir alt satıra geçer.
Assert : Boolean türündeki şart karşılanmadığı zaman bir mesaj kutusu ile kullanıcıya bilgi verir. Gelen mesaj kutusundaki seçenekler ile program sonlandırılabilir. Ayrıca Listeners koleksiyonunada ilgili mesajı yazar.
Fail: Assert metod ile aynı işlemi yapar. Tek farkı herhangi bir koşula bakmaz, kodun yazıldığı satıra gelindiğinde Assert metodundaki gibi uyarı mesajı görüntülenir.
Şimdi bir örnek yapalım. Aşağıda output da hem debug hem de trace sınıflarımızın çıktılarını görüyoruz.Çünkü dikkat edin uygulamamızı debug modda derledik.
Dikkat: System.Diagnostics isim alanını eklemyi unutmayın.
Release modda çalıştırınca debug çıktılarını göremeyiz. |
int bomba=3; Trace.Fail( "İbrahim Özbey "); Mesela uygulama bu satıra gelince soldaki çıktıyı verir. |
Listener
Debug veya Trace sınıfları kendilerine gelen verileri biriktirerek bir yada daha fazla kaynağa gönderebilirler.Bunuda TraceListener sınıfı tarafından yaparlar.
Dikkat : Listeners koleksiyonu her zaman bir öğeye sahiptir. Bu öğe DefaultTraceListener sınıfından türetilmiş olan bir nesnedir.output ekranına veri iletiminde kullanılır bu listener.
.NET Framework temel sınıf kütüphanesi Trace ve Debug sınfılarının kaydedilmesi için iki adet sınıf barındırmaktadır.Bunlar EventLogTraceListener ve TextWriterTraceListener sınıflarıdır.
TextWriterTraceListener :
Bu sınıf debug ve trace den gelen bilgileri herhangi bir stream üzerinden göndermemize yarar.
Yukarı daki örnek te önce Filestream nesnemizi oluşturuyoruz.Sonra TextWriterTraceListener nesnemizi oluşturuyoruz ve kulanacağı stream i belirtiyoruz. Sonra Lstenerimizi ekliyoruz. sonra debug ve trace bilgilerimizi yazıyoruz.Bu satırlar output ekranına yazılıyor ayrıca listener sayesinde mylog.txt Dosyamıza yazdırılıyor. |
EventLogTraceListener:
trace ve debug dan aldığı bilgiyi Windows un eventlog una yönlendir.
burada ise Önce Eventlog da mylog adlı bölüm yoksa create ediyoruz.Sonra Eventlog nesnesi oluşturuyoruz. EventLogTraceListener sınıfına Eventlog dan oluşturduğumuz nesneyi ekliyoruz ve Oluşturduğumuz EventLogTraceListener ı listener koleksiyonuna ekliyoruz.Yine Trace ve Debug bilgilerimizi yazıyoruz. bunlar yine output ekranında görünecekler fakat bu kez ayrıca Windows un olay görüntüleyicisinde de görünecekler.
TraceListener sınıflarını config dosyasından yönetmek:
Aşağıda remove tagı Default olarak gelen DefaultTraceListener i kaldırır ve add tagları ile bizim kullanacağımız listener çeşitlerini ekleriz.Name ile nesne ismimizi type ile tipini ve initializedata ile başlangıç kaynağımızı gösteririz.
kullanımı ise Direk Kodumuza
Trace.WriteLine(“Appconfig dosyasındaki ayarlarımızı kullandık :D”); satırı yazdık ve App.Config deki ayarladığımız özellikleri kullandık.
TraceSwitch:
buraya kadar debug trace sınıflarının çıktılarını aldık ama sınıflandırmadık bu sınıflandırmayı ise traceswitch ile yapacağız.
- Error: Sadece hata mesajlarını listenere gönderir. tam sayı karşılığı 1 dir
- off: Hiç mesaj göndermez. tam sayı karşılığı 0 dır.
- warning : Hata mesajları ve uyarıları gönderir. tamsayı karşılığı 2 dir.
- info : Hata mesajları,uyarılar,kısa açıklayıcı bilgiler gönderir . tam sayı karşılığı 3 dür.
- verbose: Hata mesajı ve uyarıları , sistemin ayrıntılı çalışma biçimini gönderir. karşılığı 4 dür.
iki türlü kullanımı vardır ya App.config de yar yaparız yada kodumuzun içinde.
Aşağıdaki öernekte önce traceswitch oluşturuyor. Sonrada Level ini ayrlıyoruz.Sonrada şart sağlıyorsa yazıyoruz.
private void button6_Click(object sender, EventArgs e) |
yada web.config de ufak bir ayar yaparak bu işi yine yapabiliriz. Aşağıda ki kodda value değeri yukarıda verdiğimiz trace özelliklerinin tam sayı değeridir. hangisini kullanmak istiyorsak onun değerini yazmalıyız.bu kodu web config dosyasına
<system.diagnostics> |
bu kodu da cs dosyamıza yazarsak. web.config kullanrak yapmış oluruz trace imizin level ayarını.
TraceSwitch ibo = new TraceSwitch("BenimSwith", "Açıklama"); Trace.WriteLineIf(ibo.TraceError == true, "Hata Mesajı"); |
Kendi traceListenerimizi oluşturmak istersek :
Oluşturacağımız class TraceListener den inherit almalı ve Write WriteLine metodlarını override etmeliyiz.
hemen bir örnek verelim.Kendi listener classımızı oluşturalım ve sonra web.config de şu ayarları yapalım.
yine bu kodu kullanarak Listenere giden bilgileri sqlServer da kaydedebiliriz.
TraceSwitch ibo = new TraceSwitch("BenimSwith", "Açıklama"); Trace.WriteLineIf(ibo.TraceError == true, "Hata Mesajı"); |