Anasayfa

C ve Sistem Programcıları Derneği

  • CSD Hakkında
    • Yönetim Kurulu
    • Referanslar
    • Üyelik
    • Adres
    • Kroki
    • İletişim
  • Kurslar
    • Kurs Başvurusu
    • Eğitmenler
  • Seminerler
    • Seminer İste
    • Seminer Ver
  • Kaynaklar
    • Yararlı Linkler
    • Kaynak Kod Arşivi
    • Makaleler
    • Çalışma Soruları
    • Yararlı Kitaplar
    • Dosya Arşivi
    • Döküman Arşivi
  • Duyurular
  • Haberler
  • İş İlanları
    • İş İlanı Gönder
  • SSS
  • Kurs Başvurusu

menü

  • CSD Hakkında
    • Yönetim Kurulu
    • Referanslar
    • Üyelik
    • Adres
    • Kroki
    • İletişim
  • Kurslar
    • Kurs Başvurusu
    • Eğitmenler
  • Seminerler
    • Seminer İste
    • Seminer Ver
  • Kaynaklar
    • Yararlı Linkler
    • Kaynak Kod Arşivi
    • Makaleler
    • Çalışma Soruları
    • Yararlı Kitaplar
    • Dosya Arşivi
    • Döküman Arşivi
  • Duyurular
  • Haberler
  • İş İlanları
    • İş İlanı Gönder
  • SSS
  • Kurs Başvurusu

e-posta ile bilgilendirme.

Derneğimizdeki etkinliklerden haberdar olun!

Haber mektubu üyeliğiniz

Kimler çevrimiçi

Şu an 0 kullanıcı ve 1 ziyaretçi çevrimiçi.
""
dreamhost
Anasayfa

C#'ta StackTrace ve StackFrame ile Tracing

10.03.2011 - 08:30 tarihinde aykut gönderdi
Yazan: 
Aykut TAŞDELEN

StackTrace uygulamanın yaşam döngüsündeki belirli bir t anındaki aktif stack frame’lerin izlenebildiği bir tür rapor verisidir. Herbir stack frame ise çağrılmış ve henüz sonlanmamış olan bir fonksiyona ilişkin durum bilgisini (dosya, satır no vb) ifade eder. Geliştirici debug ve diagnostik amaçlarla bu bilgilere ulaşabilir. Özellikle iç içe fonksiyon çağırmalarında hata tespiti ve izleme açısından bu bilgi önemlidir. 

Aykut TAŞDELEN

StackTrace’e programatik olarak erişimin kolay bir yolu C#’da Exception sınıfının StackTrace isimli sanal ve string türündeki property’sini kullanmaktır. Bu property basit olarak hatanın hangi fonksiyonda, hangi dosyada ve satır numarasında oluştuğunu verir.  Örneğin :

string s = “C ve Sistem Programcıları Derneği”;

try
{

    Console.WriteLine(s[50]); 
}
catch  (Exception e)
{
    Console.WriteLine(e.StackTrace);  
}

Kodunun çıktısı şöyledir :

at System.String.get_Chars(Int32 index)
at Stack_Trace_Ornegi.Main(String[] args) in C:\Stack_Tracing\Stack_Tracing\Program.cs:line 22

Şüphesiz bu property sanal olduğu için yazılan özgün bir Exception sınıfında override edilebilir.

Bir hata oluştuğunda daha detay bilgiler StackTrace ve StackFrame sınıflarıyla alınabilir. StackTrace sınıfının bool parametreli constructor’ına true sabiti geçilerek yaratılan nesneyle StackFrame’ler (nesneleri) elde edilip dosya, satır, fonksiyon gibi bilgilere ulaşılabilir. Constructor’a false geçilirse dosya ve satır bilgisi elde edilemez.

usingSystem;

usingSystem.Diagnostics;

class Stack_Trace_Ornegi

{

    public static void Foo()

    {

        Bar();

    }

     public static void Bar()

    {

        ErrorSampleerr = newErrorSample();

        err.GenerateError();

    }

     static void Main(string[] args)

    {

        try

        {

            Foo(); 

        }

        catch

        {

        }

    }

     classErrorSample

    {

        publicvoidGenerateError()

        {

            try

            {

                thrownewException(“Hata oluştu”);

            }

            catch(Exception e)

            {

                StackTracest = newStackTrace(true);

                strings = “”;

                intnum = 0;

                for(int i = 0; i < st.FrameCount;  i++)  // 4 frame var

                {

                    num = i + 1;

                    StackFramesf = st.GetFrame(i);

                    Console.WriteLine(“”);

                    Console.WriteLine(s + ” Metot: {0}”, sf.GetMethod());

                    Console.WriteLine(s + ” Dosya: {0}”, sf.GetFileName());

                    Console.WriteLine(s + ” Satır: {0}”, sf.GetFileLineNumber());

                    Console.WriteLine(s + ” Mesaj {0} : {1}”, num, e.Message);

                     s += “\t”;

                }

                throw e;

            }

        }

    }
}


Aykut TAŞDELEN

C ve Sistem Programcıları Derneği Eğitmeni

www.aykuttasdelen.net

  • Yazıcı uyumluYazıcı uyumlu
  • Arkadaşa gönderArkadaşa gönder
  • PDFPDF

Adres: 2.Taşocağı Cd. Oğuz Sk. Barbaros Apt. No: 11/4 PK: 34387  Mecidiyeköy / İSTANBUL Tel: (212) 274 63 60  (212) 274 99 89  (212) 275 88 97  (212) 288 35 20 Fax: (212) 275 88 97 E-Posta: csystem@csystem.org

İçerik yayınları
Fervens Drupal theme by Leow Kah Thong. Designed by Design Disease and brought to you by Smashing Magazine.