Pages

.Net Debug – Trace Kullanımı

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.

image

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.

image

image  Release modda çalıştırınca debug çıktılarını göremeyiz.

image 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.
image

image 

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.

image

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.
image

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.

image

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)
        {
            TraceSwitch ts = new TraceSwitch("ibrahim "," açıklama");
            ts.Level = TraceLevel.Verbose;
            Trace.WriteLineIf(ts.TraceInfo==;False,"Listenere göndereceğimiz trace in level ini verbose olarak ayarladık");
        }

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>
  <switches>
    <add name="BenimSwith" value="1"/>
  </switches>


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ı");
Trace.WriteLineIf(ibo.TraceWarning == true, "Uyarı Mesajı");
Trace.WriteLineIf(ibo.TraceInfo == true, "Bilgi Mesajı");
Trace.WriteLineIf(ibo.TraceVerbose == true, "Tüm Mesajlar");

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.

image image
yine bu kodu kullanarak Listenere giden bilgileri sqlServer da kaydedebiliriz.


TraceSwitch ibo = new TraceSwitch("BenimSwith", "Açıklama");             Trace.WriteLineIf(ibo.TraceError == true, "Hata Mesajı");
Trace.WriteLineIf(ibo.TraceWarning == true, "Uyarı Mesajı");
Trace.WriteLineIf(ibo.TraceInfo == true, "Bilgi Mesajı");
Trace.WriteLineIf(ibo.TraceVerbose == true, "Tüm Mesajlar");

Hiç yorum yok: