müfettiş
Moderatör
- Katılım
- 20 Ocak 2024
- Mesajlar
- 325
- Tepkime puanı
- 1
- Puanları
- 18
Yazılım geliştirmek, çoğu zaman kod yazmaktan ziyade mevcut kodun neden çalışmadığını anlamaya çalışmaktır. Hata ayıklama, sadece "print" ifadeleri koymak değil, sistemin durumunu analiz etmek, bellek sızıntılarını bulmak ve mantıksal hataları izlemektir. İster Python geliştiricisi olun, ister sistem seviyesinde C/C++ ile çalışın, her seviye için vazgeçilmez hata ayıklama komutları mevcuttur.
Bu satırı eklediğinizde Python yorumlayıcısı durur ve şu komutları kullanmanıza izin verir:
Eğer bir dosya "bulunamadı" hatası alıyorsanız ama dosyanın orada olduğundan eminseniz, strace size programın aslında hangi dizine bakmaya çalıştığını söyler.
5. Git ile Hata Ayıklama:
Bazen bir hata kodunuza yeni eklenmemiştir; aylar önce yapılan bir değişiklik bugün sorun çıkarıyor olabilir. Hangi commit'in hataya neden olduğunu bulmak için ikili arama (binary search) yöntemini kullanan muazzam bir komut vardır:
1. Web Geliştirme ve JavaScript Debugging
Modern web geliştiricileri için tarayıcı, dünyanın en güçlü hata ayıklama aracıdır.A. Console Komutlarının Ötesi
Sadece console.log() kullanmak yerine şu komutları deneyin:- console.table(): Karmaşık nesne dizilerini okunabilir bir tablo formatında sunar.
- console.trace(): Bir fonksiyonun hangi yollarla çağrıldığını (call stack) gösterir.
- console.time() ve console.timeEnd(): Bir kod bloğunun ne kadar sürede çalıştığını ölçmek için kullanılır.
B.
Kodunuzun içine debugger; satırını eklediğinizde, tarayıcı o satıra geldiğinde otomatik olarak durur. Bu, manuel olarak breakpoint koymaktan çok daha hızlı bir yöntemdir.2. Python'da Hata Ayıklama:
Python, basitliğiyle bilinse de karmaşık mantık hataları için yerleşik araçlar sunar.A.
Terminal üzerinden kodun içine girmek için:
Kod:
import pdb; pdb.set_trace()
Bu satırı eklediğinizde Python yorumlayıcısı durur ve şu komutları kullanmanıza izin verir:
- n (next): Bir sonraki satıra geç.
- s (step): Fonksiyonun içine gir.
- c (continue): Bir sonraki breakpoint'e kadar devam et.
- p variable_name: Değişkenin o anki değerini yazdır.
B.
print() yerine logging kullanmak, uygulamanın üretim (production) ortamında nasıl davrandığını anlamak için kritiktir. DEBUG, INFO, WARNING, ERROR ve CRITICAL seviyeleriyle hataları önem derecesine göre filtreleyebilirsiniz.3. Sistem Seviyesi ve Linux Hata Ayıklama Komutları
Sistem yöneticileri veya backend geliştiricileri için hatalar genellikle "kodun içinde" değil, "kodun sistemle olan etkileşiminde" gizlidir.A.
Bir programın işletim sistemiyle nasıl konuştuğunu (dosya açma, ağa bağlanma vb.) görmek için:
Kod:
strace -e open,connect ./program_adi
Eğer bir dosya "bulunamadı" hatası alıyorsanız ama dosyanın orada olduğundan eminseniz, strace size programın aslında hangi dizine bakmaya çalıştığını söyler.
B.
"Address already in use" veya "File locked" hataları için hangi sürecin (process) dosyayı tuttuğunu bulur:
Kod:
lsof -i :8080 # 8080 portunu kim kullanıyor?
C.
Programınızın neden yavaşladığını veya neden çöktüğünü (Memory Leak) anlamak için işlemci ve bellek kullanımını anlık izleyin.4. Bellek Hataları ve Performans: Valgrind ve GDB
C, C++ veya Rust gibi dillerle çalışıyorsanız, bellek yönetimi hataları (Segmentation Fault) en büyük düşmanınızdır.A.
Derlenmiş bir program çöktüğünde "neden" çöktüğünü bulmak için:
Kod:
gdb ./program_adi
run
bt (backtrace) # Hatanın tam olarak hangi satırda olduğunu gösterir.
B.
Programın kapatıldıktan sonra belleği temizleyip temizlemediğini kontrol eder:
Kod:
valgrind --leak-check=full ./program_adi
5. Git ile Hata Ayıklama: git bisect
Bazen bir hata kodunuza yeni eklenmemiştir; aylar önce yapılan bir değişiklik bugün sorun çıkarıyor olabilir. Hangi commit'in hataya neden olduğunu bulmak için ikili arama (binary search) yöntemini kullanan muazzam bir komut vardır:git bisect startgit bisect bad(Şu anki sürüm hatalı)git bisect good [commit_id](Hatanın olmadığı bilinen eski bir sürüm)
6. Hata Ayıklama Süreci (Mental Model)
İyi bir debugger olmak, sadece komutları bilmek değil, bir metodolojiye sahip olmaktır:- Hatayı Yeniden Üret (Reproduce): Hata her zaman aynı koşullarda mı oluyor?
- İzole Et: Sorun veritabanında mı, frontend'de mi yoksa bir API'da mı?
- Hipotez Kur: "Muhtemelen şu değişken null geliyor."
- Test Et ve Onayla: Komutları kullanarak hipotezini doğrula.
- Kalıcı Çözüm Uygula: Sadece semptomu değil, hastalığı tedavi et.
7. Özet Tablo: Hangi Sorun İçin Hangi Komut?
| Sorun Türü | Önerilen Araç / Komut | Amaç |
| Mantık Hatası (JS) | debugger; / console.trace() | Kodun akışını ve çağrı geçmişini izlemek. |
| Mantık Hatası (Python) | pdb.set_trace() | Satır satır kodun içine girmek. |
| Port Çakışması | lsof -i :PORT | Portu işgal eden süreci bulmak. |
| Sistem Yanıt Vermiyor | strace | Programın işletim sistemiyle iletişimini görmek. |
| Bellek Sızıntısı | valgrind | Kayıp bellek bloklarını tespit etmek. |
| Eski Hata Bulma | git bisect | Hatanın başladığı tarihi/commit'i bulmak. |