Xcode debug
Geliştirme yaparken en çok zaman harcadığımız kısım hataları düzeltmek veya başka bir deyişle hataları ayıklamak, başarılı bir geliştirici olmak için hata ayıklama becerimizin yüksek olması çok önemlidir. Bu yazıda Xcode’un bize sağladığı araçlardan bahsetmeye çalışacağım.
Xcode hata ayıklayıcı, kodunuz boyunca ilerlemek ve değişkenleri incelemek için çeşitli yöntemler sunar. Hatanızın nerede oluştuğunu belirlemek için gerektiğinde çağrılan işlevlere girip çıkarak kodunuzun yürütülmesini bir breakpoint ile kontrol edebilirsiniz. Kod üzerinde adım adım ilerlerken değişkenleri izleyebilir veya daha yakından incelemek için yürütmeyi duraklatabilirsiniz.
Debug area üzerindeki butonları tanıyalım;
- Continue/Pause butonu ile uygulama bir sonraki break pointte durana kadar devam eder.
- Pause butonu ile break point kullanmadan uygulama duraklatılır. Uygulama çalışırken Continue butonu Pause butonuna dönüşür.
- Step Over butonu ile aynı fonksiyondaki bir sonraki komut yürütülür.
- Step Into butonu kullanılarak sonraki işlem yürütülür. Sonraki işlem başka bir method yada fonksiyonun içindeyse hata ayıklayıcısı o işleve atlar ve StepInto butonuna her tıklandığında o işlevi yürütmeye devam eder.
- Step Into’yu kullandıktan sonra fonksiyonun geri kalanını atlamak ve çağıran method yada fonksiyona geri dönmek için Step Out butonu kullanılır.
View Debug(Debug View Hierarchy);
Uygulamanın 3D rendering yoluyla sağlanan hiyerarşisi, görünüm denetleyicileri, görünümler, metinler, resimler vb. öğeleri parçalı olarak göstererek tasarımsal hata ayıklamayı kolaylaştırır.
Görünümlerin ayıklanması, filtrelenmesi ve sabitlenmesine imkan sağlayan birçok işlev vardır. Hatalı görünümlerin nereden kaynaklandığını, constraint değerlerini görüntüleyebilirsiniz. Ekranda görünmeyen yada bir itemin hangi class içerisinde olduğunu bulamadığınızda yararlıdır.
LLDB nedir?
Düşük seviyeli bir hata ayıklama aracıdır, Xcode için varsayılan hata ayıklayıcıdır ve LVVM projesinin bir parçasıdır. Performans ve kodlanabilirlik gibi çeşitli avantajlara sahiptir.
lldb üzerinden değişkenleri yazdırmak → p, po , v ;
p (print) komutu ifadeyi değerlendirmek için kodu derler böylece fonksiyon çağrıları ve değişkenler görüntülenebilir. po(print object) bir kez ifadenizi değerlendirmek için ve tekrar nesne açıklamasını almak için iki kez derleyip yürütmeyi bitirir.
po çoğunlukla p gibidir. Ancak nesne olmayan şeylerde po kullanılırsa garip sonuçlar karşımıza çıkar. po komutu p’nin yaptığı her şeyi yapar ancak sonucu yazdırmak yerine sonuç bir objc nesnesine işaretçiyse o nesnenin açıklama yöntemini çağırır.
v (variables): Geçerli yığındaki(stack) bir değişkenin değerini yazdırır. O anda bellekte olan değeri döndürür.(XCode 10.2 ve üstü sürümlerde)
v hiç derlenmez, herhangi bir ifadeyi değerlendiremez, ancak özellik erişimine izin verir ve özyinelemeli dinamik tür çözümlemesi yapar, böylece her özellik gerçek çalışma zamanı türü olarak değerlendirilir.
XCode debug dökümanı : https://developer.apple.com/documentation/xcode/diagnosing-and-resolving-bugs-in-your-running-app