Hata ayıklama (debugging) yöntemleri: print'ten breakpoint'e
Bir hatayı bulmak çoğu zaman düzeltmekten daha uzun sürer. Aşağıdaki yöntemler dilden bağımsızdır ve "kodu rastgele değiştirip dene" döngüsünden çıkmanı sağlar.
1. Önce hatayı tekrar üret
Tekrar üretemediğin hatayı düzelttiğinden emin olamazsın. Şunları not et:
- Hangi girdiyle, hangi adımlarla oluyor?
- Her seferinde mi, ara sıra mı?
- Sadece bir ortamda mı (yerelde değil de sunucuda gibi)?
Ara sıra çıkan hatalar genellikle zamanlama (eş zamanlılık), önbellek ya da ortam farkından kaynaklanır.
2. Hata mesajını sonuna kadar oku
Yığın izinin (stack trace) en üstü hatanın fırlatıldığı yerdir, ama sebebi çoğu zaman biraz aşağıda, senin kodunun ilk göründüğü satırdadır. Kütüphane satırlarını atla, kendi dosyanı bul.
3. Aralığı daralt
- İkiye bölme: Kodun yarısını devre dışı bırak, hata devam ediyor mu? Etmiyorsa sorun kapattığın yarıdadır.
- git bisect: "Dün çalışıyordu" diyorsan hangi commit'in bozduğunu otomatik bulur:
git bisect start
git bisect bad # şu anki sürüm bozuk
git bisect good a1b2c3d # bu commit'te çalışıyordu
# Git her adımda bir commit açar, test edip good/bad dersin
git bisect reset
4. print/log doğru kullanıldığında yeterlidir
Değişkeni basmak yerine beklentini de yaz:
print(f"[sepet] urun_sayisi={len(sepet)} beklenen=3 toplam={toplam}")
Etiketli çıktı, onlarca satır arasında aradığını bulmanı kolaylaştırır. İş bitince bu satırları silmeyi unutma ya da kalıcı olması gerekiyorsa gerçek bir log kütüphanesi kullan (seviyeli: debug, info, warning, error).
5. Breakpoint ile adım adım ilerle
VS Code, JetBrains IDE'leri ve tarayıcı geliştirici araçlarında satır numarasının soluna tıklayarak breakpoint koyabilirsin. Program orada durur ve:
- Step over: Satırı çalıştırıp bir sonrakine geç.
- Step into: Çağrılan fonksiyonun içine gir.
- Watch: Bir ifadenin değerini sürekli izle.
- Koşullu breakpoint: Sadece
id == 42olduğunda dur. Döngü içindeki hatalarda çok işe yarar.
6. Lastik ördek yöntemi
Kodu satır satır, sesli olarak (ya da bir foruma soru yazarken) anlat. "Bu satır şunu yapıyor... aslında yapmıyor" dediğin an çoğu hata bulunur. Soru yazarken çözümü kendin bulursan bu yöntem çalışmış demektir.
7. Düzelttikten sonra
- Hatayı tekrar üreten bir test yaz, böylece geri dönmez.
- Sebebi commit mesajına kısaca yaz.
- Aynı kalıbın kodun başka yerinde olup olmadığına bak.
Sizin en çok işe yarayan hata ayıklama alışkanlığınız ne? Paylaşırsanız listeye ekleyelim.