Plazma sayı 4, sayfa 54

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 54

Giriş

Merhaba arkadaşlar. Bu yazıda genel bazı hata arama ve bulma tekniklerinden bahsedip, bu tekniklerin özellikle C64 programları geliştirirken nasıl uygulandıklarını göstereceğiz. Bunun için en önemli araçlardan biri olan Vice emülatörünü kullanacağız. Vice emülatörü hem Windows hem Linux'ta çalışan bir araç olduğu için iki platformda Vice'ın farklı olduğu noktaları da belirteceğiz.

Bu yazıda aşağıdaki konular anlatılacak:

Debugger'lara Genel Bakış * Breakpoint'ler Kod'u adım adım çalıştırma Register'ları inceleme * Belleği inceleme Vice Monitörü Örnek kod Monitöre giriş ve çıkış Breakpoint'ler Adım adım ilerlerken register'ları takip etmek C64 Programlarında Sık yapılan hatalar Daha ileri teknikler

Bellekteki değişmeleri yakalamak.

Karmaşık breakpoint'ler

Başkalarının programlarını incelemek.

Debugger'lara Genel Bakış

Her platformda debugger deyince aklımıza gelen bazı ortak noktalar vardır. Genelde yazılan bir programın içinde herhangi bir anda belleğin ve CPU register'larının durumunu sorgulayarak o programın içindeki hataları bulmaya ve gidermeye çalışırız. Debugger'lar çeşitli GUI'ler veya komut konsolu arayüzlerine sahip olabilir. Fakat bazı temel özellikler bütün debugger'larda aynıdır.

- Breakpoint'ler

Bellekte çalışan kodun, herhangi bir noktasına gelince programın duraklamasını isteyebiliriz. Breakpoint'ler debugger'da, bellekteki kodun bir satırına (veya makine dili komutuna) yerleştirebildiğimiz bir araçtır. CPU kodu işletirken, breakpoint ile karşılaşırsa o anda programı dondurup kontrolü bize ve debugger'a verir. Böylece biz debugger'ın çeşitli komutlarını kullanarak register'ların ve belleğin tam o anda sahip oldukları değerleri inceleyebiliriz.

Genelde breakpoint'leri kullanırken aklımızda iki şey vardır:

Birincisi CPU oradan önceki komutları başarıyla işletip bu noktaya gelebiliyor mu, bunu görmek isteyebiliriz. Programımızı yazıp çalıştırdığımız zaman ilk karşımıza çıkan ve yanlış olan belirti, genelde bize nereye bakmak istediğimiz ile ilgili fikir verebilir. Örneğin, programın bir yerde ekrana bir mesaj çıkarmasını bekliyorsak ve bu mesaj çıkmıyorsa, mesajı yazdıran fonksiyonu çağıran yerlere breakpoint koyabiliriz. Programımız o fonksiyonu düzgünce çağırıyor mu? Bazen bu şekilde breakpoint koyup programımızı çalıştırınca CPU'nun durmadığını görür ve anlarız ki program oraya hiç gelmiyor. Ya bir yerlerdeki kontrollü dallanma (if else / je / bne ...) bizim beklediğimiz gibi çalışmıyor, ya da program daha önce bir yerde bir sonsuz döngüde kalıyor.

İkincisi ise eğer program başarıyla breakpoint'e ulaşıp duruyorsa breakpoint'ten sonraki o kritik algoritmamızı yavaş yavaş inceleyebilme isteği. Çoğu zaman bir breakpoint'ten sonra programımızı adım adım çalıştırarak yaptığımız pek çok hatayı buluruz.

Breakpoint'leri öğrendiğiniz anda hata ayıklama sanatının %50'sini öğrendiniz demektir.

- Kod'u

adım adım çalıştırma

Genelde bir algoritmanın tam olarak doğru çalışıp çalışmadığını anlamak için debugger'ın adımlama özelliklerinden faydalanırız. Bütün debugger'larda Step-In, Step-Over ve Return-from-Function denilen üç adım çeşidi her zaman vardır.

Step-In bir seferde bir komut ilerlemenizi sağlar. Bu komut eğer bir alt fonksiyona atlama komutu ise, yaptığınızda gidilen alt fonksiyonun ilk komutunda bulursunuz kendinizi.

Step-Over da bir seferde bir komut ilerlemenizi sağlar. Fakat Step-In'den farklı olarak eğer bir sonraki komut alt rutine atlama komutuysa, Step-Over ile bütün alt fonksiyonu bir seferde çalıştırıp o alt rutin döndükten sonraki ilk komutta bulursunuz kendinizi. Dolayısıyla kodu adım adım ilerletirken detaylı incelemek istemediğiniz bir alt rutin çağrısı ile karşılaşırsanız Step-Over ile vakit kaybetmeden ilerleyebilirsiniz.

Son olarak Return-From-Function komutu ile de o an bulunduğunuz fonksiyon veya rutinin sonuna kadar ilerleyip, o rutini çağıran yere dönebilirsiniz. Bu da genelde bir alt rutini incelemek için içine girdikten sonra aradığınız sonucun o rutinde olmadığını görünce kullanabileceğiniz bir komuttur.

- Register'ları

ve belleği inceleme

Genelde kodda adım adım ilerlerken her komuttan sonra CPU register'larındaki değerleri inceleyerek komutların ve hesaplamaların beklediğiniz sonuçları ortaya çıkarıp çıkarmadığını takip edebilirsiniz. Her debugger CPU register'larındaki değerleri ve belleğin durumunu size gösterecek komutlarla donatılmıştır.

Klavyeyle gezinmek için ← ve → tuşları.