Kazanimlar:
- Çökme kayıtlarını (stack trace) ilgili kod ve senaryo bağlamıyla yapay zekaya vererek olası kök nedenleri hızla daraltabilme
- Yapay zekanın teşhisini bir hipotez olarak kodda ve testte doğrulayıp belirtiyi susturmak yerine kök nedeni kalıcı biçimde çözebilme
- Çökme kayıtları ve loglardaki kişisel veriyi maskeleyerek hata ayıklarken gizliliği koruyabilme
Her uygulama hata verir; iyi geliştiriciyi ayıran, hataları ne kadar hızlı bulup çözdüğüdür. Mobil hata ayıklama (debugging — bir sorunun kaynağını bulup düzeltme) özellikle zordur çünkü hata kullanıcının cihazında, sizin göremediğiniz bir ortamda gerçekleşir. Elinizde çoğu zaman sadece bir çökme kaydı (crash log / stack trace — uygulamanın çöktüğü anda nereden nereye gittiğini gösteren teknik döküm) olur. YZ, bu kriptik kayıtları okumakta, olası sebepleri sıralamakta ve çözüm önermekte son derece güçlüdür. Bu ünitede YZ'yi bir "hata dedektifi" olarak kullanmayı, ama son teşhisi ve düzeltmeyi doğrulama sorumluluğunun sizde kaldığını öğreneceğiz.
Çökme kaydını okumak: YZ'nin en parlak olduğu yer
Bir çökme kaydı, uzun ve göz korkutucu bir metindir; deneyimsiz geliştirici nereye bakacağını bilemez. YZ bu metni saniyeler içinde çözümler: hangi satırda çöktü, hangi istisna (exception — programın devam edemeyeceği hata) fırlatıldı, olası sebep ne. Yaygın mobil hatalar bellidir ve YZ bunları hızla tanır: Android'de NullPointerException (boş bir değere erişmeye çalışma), IndexOutOfBoundsException (var olmayan liste elemanına erişme), iOS'ta EXC_BAD_ACCESS (serbest bırakılmış belleğe erişme), unexpectedly found nil (nil bir optional'ı zorla açma).
En sık karşılaşılan mobil çökme türleri ve tipik sebepleri şöyledir:
Hata (istisna)
Platform
Tipik sebep
NullPointerException
Android
Boş (null) bir değere erişme
IndexOutOfBoundsException
Android
Var olmayan liste elemanına erişme
unexpectedly found nil
iOS
nil bir optional'ı zorla açma (!)
EXC_BAD_ACCESS
iOS
Serbest bırakılmış belleğe erişme
ANR / donma
Android
Ana iş parçacığında uzun/ağır işlem
Adım adım hata ayıklama akışı:
- Kaydı topla. Çökme kaydını, hata mesajını, mümkünse tekrar üretme adımlarını bir araya getirin.
- YZ'ye bağlamla ver. Sadece hatayı değil, ilgili kod parçasını ve ne yaparken çöktüğünü söyleyin.
- Olası sebepleri iste. "En olası 3 sebebi ve her biri için nasıl doğrulayacağımı söyle."
- Doğrula. Önerilen sebebi kodda ve testte teyit edin; tahminle düzeltmeyin.
- Düzelt ve tekrar test et. Hatanın gerçekten gittiğini ve yeni hata doğmadığını kontrol edin.
İpucu: Çökme kaydını YZ'ye verirken ilgili kod parçasını da ekleyin. Yalnızca stack trace ile YZ genel tahmin yapar; kodu görünce kesin satırı ve gerçek sebebi bulma olasılığı çok artar. Bağlam, teşhisin kalitesini belirler.
Kişisel veri tuzağı
Çökme kayıtları ve loglar sıklıkla kullanıcı verisi içerir: e-posta, kullanıcı kimliği, konum, hatta form içeriği. Bu kaydı olduğu gibi YZ'ye yapıştırmak, kişisel veriyi üçüncü tarafa sızdırmaktır ve KVKK/GDPR ihlalidir. Kaydı vermeden önce kişisel alanları temizleyin (maskeleyin). Ayrıca uygulamanızın loglarına baştan kişisel veri yazmamaya özen gösterin; iyi bir log, sorunu anlatır ama kimliği açık etmez.
Dikkat: YZ'nin önerdiği düzeltme "hatayı susturabilir" ama kök sebebi çözmeyebilir. Örneğin bir NullPointerException'ı boş kontrolüyle sarmak çökmeyi durdurur, ama değerin neden null geldiğini çözmezseniz asıl mantık hatası yaşamaya devam eder. Belirtiyi değil, hastalığı tedavi edin.
Kök neden analizi
Profesyonel hata ayıklamada amaç, hatayı susturmak değil kök nedeni (root cause — sorunun asıl kaynağı) bulmaktır. YZ'ye "bu neden null geliyor olabilir, veri akışının neresinde kaybolmuş olabilir?" diye sormak, "bunu nasıl susturarım?" diye sormaktan çok daha değerlidir. Kök nedeni bulunca aynı hatanın onlarca varyasyonu tek seferde çözülür. YZ bu zincirleme muhakemede iyidir: veriyi girişten çıkışa kadar takip edip nerede bozulduğunu düşünmesini isteyin.
Üç mini vaka
Vaka 1 — 2 saatlik iş 10 dakikada. Bir geliştirici, yalnızca belirli bir Samsung modelinde çöken bir hatayı 2 saat aradı. Çökme kaydını (kişisel alanları temizleyerek) YZ'ye verdi; YZ, hatanın o cihazın farklı kamera çözünürlüğünde oluşan bir bellek taşmasına işaret ettiğini söyledi. İpucuyla sebep 10 dakikada bulundu. YZ aramayı hızlandırdı, çözümü insan doğruladı.
Vaka 2 — Susturulan hata geri döndü. Bir ekip, tekrarlayan bir çökmeyi YZ önerisiyle try-catch içine alıp susturdu. Çökme durdu ama kullanıcılar "veriler kaydolmuyor" diye şikayet etmeye başladı; çünkü asıl sorun (veritabanı bağlantısı) hâlâ oradaydı, sadece görünmez olmuştu. Kök neden bulununca hem çökme hem veri kaybı çözüldü. Ders: susturmak çözmek değildir.
Vaka 3 — Log'da sızan veri. Bir denetimde, uygulamanın çökme loglarına kullanıcıların tam adı ve telefon numarasının yazıldığı fark edildi. Geliştiriciler bu logları rutin olarak YZ'ye yapıştırıp hata çözüyordu; yani kişisel veri aylardır dışarı gidiyordu. Loglar maskelendi ve süreç düzeltildi. Ders: hata ayıklarken bile gizlilik geçerlidir.
Zayıf prompt / Güçlü prompt
Zayıf prompt:"Bu hata neden oluyor? [stack trace]"
Güçlü prompt:"Android uygulamamda bu çökme oluyor. Bağlam:- Ne yaparken: kullanıcı ürün detayından sepete eklerken- Sadece bazı cihazlarda, düşük RAM'li modellerde- İlgili kod: [ViewModel ve Repository parçası]- Çökme kaydı (kişisel veri temizlenmiş): [stack trace]En olası 3 kök nedeni sırala. Her biri için:1) Nasıl doğrularım, 2) Kalıcı düzeltme (susturma değil).Emin olmadığın yerde varsayımını belirt."
Kopyalanabilir şablonlar
Çökme analizi şablonu:"Şu çökmeyi analiz et. Bağlam: [ne yaparken, hangi cihaz/sürüm].İlgili kod: [kod]. Çökme kaydı (kişisel veri temizli): [trace].En olası 3 kök nedeni ve her biri için doğrulama + kalıcı düzeltme ver.Belirtiyi susturan geçici çözümleri ayrıca işaretle."
Kök neden şablonu:"Bu değer beklenmedik şekilde [null/yanlış] geliyor.Veri akışını girişten bu noktaya kadar takip et:nerede kaybolmuş ya da bozulmuş olabilir?Her aşamada kontrol etmem gereken noktayı söyle. [kod]"
Log okuma şablonu:"Bu log çıktısını yorumla: hangi olaylar sırayla oldu,nerede anormallik var, hata öncesi son sağlıklı adım neydi?[log — kişisel veri temizlenmiş]"
Reprodüksiyon şablonu:"Bu hatayı güvenilir biçimde tekrar üretmek için hangi adımları,cihaz durumlarını ve verileri denemeliyim?Hatayı tetikleyebilecek koşulları olasılık sırasıyla listele. [açıklama]"
Sık yapılan hatalar
- Bağlamsız stack trace vermek. İlgili kod ve senaryo olmadan YZ genel tahmin yapar.
- Kişisel veriyi loglarla birlikte YZ'ye yapıştırmak. Gizlilik ihlali; önce maskeleyin.
- Belirtiyi susturmak. try-catch ile çökmeyi gizlemek kök sorunu bırakır, yeni sorun doğurur.
- İlk öneriyi doğrulamadan uygulamak. YZ'nin teşhisi bir hipotezdir; kodda teyit edin.
- Emülatörde tekrar üretmeye çalışmak. Bazı hatalar sadece gerçek cihaz/koşulda çıkar.
- Düzeltme sonrası yeniden test etmemek. Düzeltme başka bir yeri bozmuş olabilir; regresyonu kontrol edin.
Özetle
YZ, çökme kayıtlarını okumak ve olası sebepleri sıralamakta en parlak olduğu alanlardan birindedir; bağlam verildiğinde teşhis kalitesi çok artar. Ama son teşhis ve düzeltme insanındır: YZ'nin önerisi bir hipotezdir, kodda ve testte doğrulanır. Amaç belirtiyi susturmak değil kök nedeni çözmektir; susturulan hata genellikle başka biçimde geri döner. Çökme kayıtları kişisel veri içerebilir; YZ'ye vermeden önce maskeleyin ve loglarınıza baştan kişisel veri yazmayın.
Uygulama görevi
Elinizdeki (veya YZ'den ürettiğiniz örnek) bir çökme kaydını alın, içindeki her türlü kişisel/ayırt edici veriyi maskeleyin ve "Çökme analizi şablonu" ile YZ'ye verin. YZ'nin sıraladığı kök nedenlerden hangilerinin gerçek düzeltme, hangilerinin sadece susturma olduğunu ayırın. Seçtiğiniz kalıcı düzeltmeyi uygulayıp hatanın gittiğini ve yeni bir sorun doğmadığını doğrulayın.
Kontrol listesi
- [ ] Çökme kaydını ilgili kod ve senaryo bağlamıyla verdim
- [ ] Loglardaki kişisel/ayırt edici veriyi maskeledim
- [ ] YZ'den kök neden ve kalıcı düzeltme istedim, susturma değil
- [ ] Teşhisi kodda ve testte doğruladım, körü körüne uygulamadım
- [ ] Düzeltme sonrası hatanın gittiğini ve regresyon olmadığını test ettim
- [ ] Uygulamamın loglarına kişisel veri yazmadığını kontrol ettim