Hata Ayıklama Araçları

Eyl 06, 2013

Visual Studio .NET projelere ait tüm kaynakların built (birleştirme) işlemine katılması ve derlenmesi için genel olarak iki seçenek sunmaktadır. Bunlar; Debug (Hata Ayıklama) ve Release (Yayınlama) seçenekleridir. Hata Ayıklama seçeneğini seçerek bir programı derlediğimizde Debugger (Hata Ayıklayıcı) programının çeşitli ihtiyaçlarını karşılamak için çalıştırılabilir dosyaya birçok eklenti yapılmaktadır. Örneğin, çalışma zamanında satır satır ilerleyebilmek için Hata Ayıklayıcı, program içindeki nesnelerden ve değişkenlerden haberdar olmak zorundadır. Hata Ayıklama seçeneği ile derlenen çalıştırılabilir dosya boyutlarının büyük olma nedeni de budur. Ayrıca hata ayıklama seçeneği ile derlenen çalıştırılabilir dosyalarda herhangi bir kod iyileştimesi de yapılmamaktadır. Yayınlama seçeneği ise programın geliştirilme aşaması bittiğinde kullanıcıya sunulucak programı oluşturmak için kullanılır. Yayınlama seçeneği ile derlenen kaynak kodlarda herhangi bir Hata Ayıklayıcı programına bağımlı sembol ya da işaret bulunmaz. Ayrıca derleyici çalıştırılabilir dosya üzerinde kod iyileştimesi yapmaktadır. Bu projede hata ayıklamak amacıyla genel olarak hata ayıklama seçeneği ve öğeleri üzerinde durulacaktır. Hata ayıklamanın avantajı, bir hata oluştuğunda otomatik olarak çalıştırılan ExceptionHandler(İstisnai Durum Yöneticisi) adında bir kod bloğu tanımlanmasına imkan vererek hata yönetimi verimliliğini artırmaktır. Bir diğer avantajı ise, çok sık oluşan program hataları için nesne tabanlı programlamada standart istisnai durumların tanımlanmış olmasıdır.

Hata Türleri

  • Yazım Hataları: Program içinde kullanılan fonksiyon adları, değişken adları, yapı isimleri ve komutların karakterlerinin yanlış yazımından meydana gelen hatalardır. Örneğin, MessageBox.Show yazılması gerekirken MessageBoxShow yazılırsa yazım hatası oluşur. Oluşan bu hata TaskList (Görev Listesi)penceresinde görüntülenir.
  • Çalışma Zamanı Hataları: Uygulamanın çalışması sırasında bir işlem çalışmayabilir. Sıfıra bölme hatası bu tür hatalara bir örnektir.
  • Mantıksal Hatalar: Bu hatalar uygulama derlenirken ve yürütülürken oluşur. Bu durumda program çalışsa bile yanlış sonuç üretir. Örneğin, yaş bilgisi girilmesi istenen bir alana negatif değer girilemez ya da bir işçinin maaşı hesaplanırken haftada 50 saat yazılması gereken yere 150 saat yazılırsa program çalışır ancak sonuç doğru olmaz. Bu hata bir mantık hatasıdır.

Debug (Hata Ayıklama) Menüsü Elemanları ve Debug Attributes (Hata Ayıklama Nitelikleri)

  • Debug (Hata Ayıklama) Menüsü Elemanları
    • Start (Çalıştır): Uygulamayı çalıştırmak için kullanılır. Klavye kısayolu F5'tir.
    • Restart (Yeniden Çalıştır): Çalışmakta olan programı sonlandırır ve uygulamanın yeniden yürütülmesini sağlar. Klavye kısayolu Ctrl+Shift+F5'tir.
    • Stop Debugging (Hata Ayıklamayı Durdur): Hata ayıklama işlemini sonlandırır ve tasarım ekranına geri döner. Klavye kısayolu Shift+F5'tir.
    • Step Into (Adım Adım): Program kodlarını satır satır çalıştırır. Klavye kısayolu F11'dir. Step Into sadece bulunduğu metot içinde çalışır.
    • Step Over (Adım Atlama): Kodları satır satır çalıştırmak için kullanılır ancak bir satırda çağırılan bir metot ise o metodun içine girmeden metodu çalıştırır ve bir sonraki satıra geçer ve o satırdan çalışmaya devam eder.
    • Step Out (Tüm Adımlar): Çalıştırılan kodların içindeki tüm komutları işletir ve eğer metot içinde başka bir metot çağırılıyorsa o metodu da işletir ve bir sonraki satırdan çalıştırmaya devam eder.
    • Run to cursor (İmlece Git): İmlecin bulunduğu satırdan itibaren programın çalışmasını sağlar.
    • Watch (Gözle): Bir değişken ya da ifadenin programın çalışması esnasında hangi değerleri aldığını görmeyi sağlar. Değişkenin üzerinde iken sağ tıklanarak açılan menüde Add Watch (Gözlem Ekle) komutu işaretlenir, böylece değişken Gözle penceresine aktarılır ve burada değerleri izlenir. Bu işlemde programın Hata Ayıklama kipinde olması gerekir ve program satır satır çalıştırılır. Çalışma zamanında Hata Ayıklama Menüsü’ndenQuickWatch (Hızlı Gözlem) komutu çalıştırılırsa ekrana gelen pencerede "public" tipindeki tüm değişkenler ve işletilen metot içindeki diğer değişkenler izlenir. Recalculate (Yeniden Hesaplama) ile seçilen değişkenin değeri tekrar hesaplatılır. Seçilen değişken Gözlem Ekle seçeneğiyle Gözle penceresine de aktarılabilir.
  •  Debug Attributes (Hata Ayıklama Niteliği)
    • DebugDisplay (Hata Gösterici): Hata Ayıklama işlemi sırasında büyük nesnelerin özellikleri incelenmek istendiğinde, nesne üzerine gelinerek ilgili değerler incelenir, ancak sadece birkaç özellik değeri incelenmek istendiğinde birçok özellik arasından gidip o değerleri bulmak zor bir iştir. Bu nedenle bu gibi durumlarda kullanılmak amacıyla "DebuggerDisplay" niteliği geliştirilmiştir. Hata Gösterici Niteliği Hata Ayıklama işlemi sırasında nesne üzerine gelinerek sadece istenilen özelliklerin görülmesini sağlar.
    • DebuggerStepThrough (Hata Dallanmayı Önleyici): Bu nitelik hata ayıklama işlemi sırasında F11 ile dallanma yapmak istendiğinde önemli bulunmayan bir kod bölümünündeki dallanmayı engeller.
    • DebuggerBrowsable (Hataya Göz Atma): Bu nitelik uygulandığı nesne özelliğinin hata ayıklama ekranında görüntülenmesini engeller.

Tasklist (Görev Listesi) Penceresi

Program içinde tanımlanmayan değişken, metot ya da yazılım hatalarını gösteren penceredir. Tasklist (Görev Listesi) penceresini açmak için View (Görüntü) menüsünden Tasklist (Görev Listesi) komutu seçilir. Diğer bir yöntem ise klavye kısayolu olarak Ctrl+Alt+K'dır.

Breakpoint (Kesme Noktası) ve Breakpoints Penceresi

Programın işleyişini istenilen bir noktada durdurmak için kod satırına BreakPoint (Kesim Noktası) eklenir. Böylece program işaret edilen kesme noktasında durur. Bir kod satırına kesme noktası eklemek için F9 tuşu tıklanır veya sağ tıklama ile açılan menüden Insert BreakPoint (Kesme Noktası Oluştur) komutu seçilir.

Kesme noktası eklenmiş olan satır "BreakPoint" penceresinde gösterilir. Program çalıştırılıp kesme noktası eklenen satıra gelindiğinde programın çalışması durur ve kırmızı zemin sarıya döner. Kesme noktasını silmek için Kesme Noktaları penceresinden kesme noktası seçilerek açılan menüden Delete (Sil) komutu seçilir.

  • Breakpoint Properties (Kesim Noktası Özellikleri)
    • Condition (Şart): Belirli bir şarta bağlı olarak hata ayıklama işlemi gerçekleştirilmek istediğinde bu özellik aktif hale getirilebilir. Bu özelliğin kullanımı için Kesme Noktası üzerine sağ tıklanarak çıkan menüden Condition... seçilerek şart eklenir.
    • Hit count (Kayıtlı Hatalar): Hata Ayıklama işlemi sırasında o zamana kadar kaç kez Kesme Noktasına gelindiği takip edilir ve eğer istenirse "eğer bu kesme noktasına x kez gelindiyse artık hata ayıklama işlemi yapılmasın." komutu verilebilir.
    • Filter (Filtreleme): Bu özellik belirli filtreler konularak hata ayıklama işlemini aktif hale getirmek için kullanılır.
    • When Hit (Kayıt Zamanı): Hata Ayıklama işlemi aktif hale getirilmek istendiğinde Output Window (Çıktı Penceresi)'a durum bilgileri yazdırılabilir, eğer istenirse hangi metot içinde olduğu ve metodu kimin çağırdığı yazdırılabilir.

Output (Çıktı) Penceresi

Programın derlenmesi aşamalarının gösterildiği penceredir. Kısayol tuşu Ctrl+ Alt+O olarak kullanılır. Output (Çıktı) penceresinde bulunan dropdownlist (açılır liste kutusu)' nda iki seçenek vardır. Bunlar; Build (Yapısal) ve Debug (Hata Ayıklama)’dır.

Açılır liste kutusundan Build seçeneğinde derlemeyle ilgili bilgiler görüntülenir.

"Debug" seçildiğinde ise program EXE haline dönüşürken kullanılan dosyalar görüntülenir.

Command Window (Komut Penceresi)

Uygulamanın çalışma zamanında takip edilme işlemine Trace (İzlemek) denir. Komut penceresi, trace anında kod satırlarına yer alan değişkenlerin o anki değerlerinin görülmesini ve bu değerlerle matematiksel işlemler yapılmasını sağlayan penceredir. Kısayol tuşu Ctrl+Alt+A olarak kullanılır.

Kod satırıyla ilgili işlem ve hesaplamalar için Komut Penceresi'nde immed yazılarak immediate (şimdiki durum) durumuna geçilir. Bu durumda değişkenlerle işlem yapabilmek için ilk önce ? (Soru İşareti) yazılır. Tekrar Komut Penceresine geçmek istenirse >cmd satırı yazılır.