Android Studio, aşağıdakileri ve daha fazlasını yapmanıza olanak tanıyan bir hata ayıklayıcı sunar:
- Uygulamanızda hata ayıklama işlemi yapmak için bir cihaz seçin.
- Java, Kotlin ve C/C++ kodunuzda kesme noktaları ayarlayın.
- Değişkenleri inceleyin ve ifadeleri çalışma zamanında değerlendirin.
Bu sayfada temel hata ayıklayıcı işlemleriyle ilgili talimatlar yer almaktadır. Daha fazla doküman için IntelliJ IDEA hata ayıklama dokümanlarına da bakın.
Hata ayıklamayı etkinleştirme
Hata ayıklamaya başlamadan önce aşağıdakileri yapın:
- Cihazınızda hata ayıklamayı etkinleştirin.
- Emülatörü kullanıyorsanız hata ayıklama varsayılan olarak etkindir. Ancak bağlı bir cihaz için cihazın geliştirici seçeneklerinde hata ayıklamayı etkinleştirmeniz gerekir.
- Hata ayıklanabilir bir derleme çeşidini çalıştırın.
Derleme yapılandırmasında
debuggable true(Kotlin komut dosyalarındaisDebuggable = true) içeren bir derleme değişkeni kullanın.Genellikle,
build.gradledosyasında görünmese de her Android Studio projesinde bulunan varsayılan "debug" varyantını seçebilirsiniz. Ancak hata ayıklanabilir olması gereken yeni derleme türleri tanımlarsanız derleme türünedebuggable trueeklemeniz gerekir:- Uygulamanızın kodunda kesme noktaları ayarlayın.
- Araç çubuğunda, hedef cihaz menüsünden uygulamanızda hata ayıklama yapacağınız cihazı seçin.
Şekil 1. Hedef cihaz menüsü. Yapılandırılmış cihazınız yoksa USB ile cihaz bağlamanız, kablosuz bağlantı ile cihaz bağlamanız veya Android Emulator'ı kullanmak için AVD oluşturmanız gerekir.
- Araç çubuğunda Hata ayıklama'yı
tıklayın.
Uygulamanız cihazda zaten çalışıyorsa Run'dan Debug'a geçmek isteyip istemediğinizi soran bir iletişim kutusu gösterilir. Hata ayıklamaya başlamak için cihazın yeniden başlatılması gerekir. Uygulamanın aynı örneğinin çalışmaya devam etmesini sağlamak için Hata Ayıklamayı İptal Et'i tıklayın ve bunun yerine hata ayıklayıcıyı çalışan bir uygulamaya ekleyin. Aksi takdirde Android Studio bir APK oluşturur, bunu bir hata ayıklama anahtarıyla imzalar, seçtiğiniz cihaza yükler ve çalıştırır.
Projenize C ve C++ kodu eklerseniz Android Studio, yerel kodunuzda hata ayıklamak için Hata Ayıklama penceresinde LLDB hata ayıklayıcısını da çalıştırır.
- Hata ayıklama penceresi açık değilse Görünüm > Araç Pencereleri > Hata Ayıklama'yı seçin veya araç penceresi çubuğunda Hata Ayıklama'yı
tıklayın. - Attach debugger to Android process'i (Hata ayıklayıcıyı Android işlemine ekle)
tıklayın.
- Choose Process (İşlem Seç) iletişim kutusunda, hata ayıklayıcıyı eklemek istediğiniz işlemi seçin.
- Emülatör veya root edilmiş bir cihaz kullanıyorsanız tüm işlemleri görmek için Tüm işlemleri göster'i işaretleyebilirsiniz. Root edilmiş bir cihazda bu seçenek, cihazda çalışan tüm işlemleri gösterir. Ancak root erişimi olmayan bir cihazda bu yalnızca hata ayıklanabilir işlemleri gösterir.
- Use Android Debugger Settings from (Android hata ayıklayıcı ayarlarını kullan) menüsünden mevcut bir çalıştırma/hata ayıklama yapılandırması seçebilirsiniz. C ve C++ kodu için: Bu, mevcut bir yapılandırmada LLDB başlangıç komutlarını, LLDB ekleme sonrası komutlarını ve sembol dizinlerini yeniden kullanmanıza olanak tanır.
- Mevcut bir çalıştırma/hata ayıklama yapılandırmanız yoksa Yeni Oluştur'u seçin. Bu seçim, Hata Ayıklama Türü menüsünü etkinleştirir. Bu menüde farklı bir hata ayıklama türü seçebilirsiniz. Android Studio, varsayılan olarak projenizde Java veya C/C++ kodu olup olmadığına göre sizin için en iyi hata ayıklayıcı seçeneğini belirlemek üzere Hata Ayıklama Türünü Otomatik Olarak Algıla'yı kullanır.
- Tamam'ı tıklayın.
Hata ayıklama penceresi görünür.
- Yürütme ve gezinme araç çubuğu Kesme noktalarıyla çalışma başlıklı makaleyi inceleyin.
- İplik seçici
- Değerlendirme ve izleme ifadesi girişi. Değişkenleri inceleme başlıklı makaleyi inceleyin.
- Yığın ekranı
- Değişkenler bölmesi. Değişkenleri inceleme başlıklı makaleyi inceleyin.
- Otomatik olarak algıla
- Android Studio'nun hata ayıklamasını yaptığınız kod için en iyi seçeneği otomatik olarak belirlemesini istiyorsanız bu hata ayıklama türünü seçin. Örneğin, projenizde C veya C++ kodu varsa Android Studio otomatik olarak Çift hata ayıklama türünü kullanır. Aksi takdirde, Android Studio yalnızca Java hata ayıklama türünü kullanır.
- Yalnızca Java
- Yalnızca Java veya Kotlin ile yazılmış kodda hata ayıklamak istiyorsanız bu hata ayıklama türünü seçin. Yalnızca Java hata ayıklayıcısı, yerel kodunuzda ayarladığınız tüm kesme noktalarını veya izlemeleri yoksayar.
- Yalnızca Yerel (yalnızca C/C++ koduyla kullanılabilir)
-
Kodunuzda hata ayıklamak için yalnızca LLDB'yi kullanmak istiyorsanız bu hata ayıklama türünü seçin. Bu hata ayıklama türü kullanılırken Java hata ayıklama oturumu görünümü kullanılamaz. Varsayılan olarak,
LLDB yalnızca yerel kodunuzu inceler ve Java kodunuzdaki kesme noktalarını
yoksayar. Java kodunuzda da hata ayıklamak istiyorsanız Otomatik Olarak Algıla veya Çift hata ayıklama türüne geçin.
Yerel hata ayıklama yalnızca aşağıdaki koşulları karşılayan cihazlarda çalışır:
Cihaz,
run-asözelliğini destekliyor.Cihazın
run-asözelliğini destekleyip desteklemediğini kontrol etmek için cihazınıza bağlı ADB kabuğunda aşağıdaki komutu çalıştırın:run-as your-package-name pwd
your-package-nameyerine uygulamanızın paket adını yazın. Cihazrun-as'ı destekliyorsa komut hatasız olarak döndürülmelidir.Cihazda
ptraceetkinleştirilmiş olmalıdır.ptraceözelliğinin etkin olup olmadığını kontrol etmek için cihazınıza bağlı ADB kabuğunda aşağıdaki komutu çalıştırın:sysctl kernel.yama.ptrace_scope
ptraceetkinse komut,0değerini veyaunknown keyhatasını yazdırır.ptraceetkinleştirilmemişse0dışında bir değer yazdırılır.
- Çift (Java + Native): Yalnızca C/C++ koduyla kullanılabilir.
-
Hem Java hem de yerel kodda hata ayıklama arasında geçiş yapmak istiyorsanız bu hata ayıklama türünü seçin.
Android Studio, hem Java hata ayıklayıcısını hem de LLDB'yi uygulama işleminize ekler. Böylece, uygulamanızı yeniden başlatmadan veya hata ayıklama yapılandırmanızı değiştirmeden hem Java hem de yerel kodunuzdaki kesme noktalarını inceleyebilirsiniz.
Şekil 2'de, hata ayıklama penceresi başlığının sağındaki iki sekmeye dikkat edin. Uygulamada hem Java hem de C++ kodu bulunduğundan bir sekme yerel kodda hata ayıklama, diğeri ise -java ile belirtildiği gibi Java kodunda hata ayıklama içindir.
Şekil 3. Yerel kodda hata ayıklama için sekme ve Java kodunda hata ayıklama için sekme.
Modern
android { buildTypes { customDebugType { debuggable true ... } } }
Kotlin
android { buildTypes { create("customDebugType") { isDebuggable = true ... } } }
Bu özellik, C/C++ kodu içeren modüller için de geçerlidir.
Not: jniDebuggable özelliği artık kullanılmamaktadır.
Uygulamanız, hata ayıklamak istediğiniz bir kitaplık modülüne bağlıysa bu kitaplık da hata ayıklama sembollerini korumak için debuggable true ile paketlenmelidir.
Uygulama projenizin hata ayıklanabilir varyantlarının bir kitaplık modülünün hata ayıklanabilir varyantını aldığından emin olmak için kitaplığınızın varsayılan olmayan sürümlerini yayınlayın.
Hata ayıklamayı başlatma
Hata ayıklama oturumunu aşağıdaki gibi başlatabilirsiniz:
Hata ayıklayıcıyı çalışan bir uygulamaya ekleme
Uygulamanız cihazınızda zaten çalışıyorsa aşağıdaki şekilde uygulamanızı yeniden başlatmadan hata ayıklamaya başlayabilirsiniz:
Cihaz Gezgini'ndeki (Görünüm > Araç Pencereleri > Cihaz Gezgini) İşlemler sekmesinde de hata ayıklanabilir işlemlerin listesi bulunur. Buradan bir işlem seçip sonlandırabilir
,
durdurmaya zorlayabilir
veya hata ayıklayıcıyı belirli bir işleme ekleyebilirsiniz
.
Hata ayıklama penceresi
Hata ayıklama penceresi şu bölümlere ayrılır:
Not: Android Studio hata ayıklayıcısı ve çöp toplayıcı gevşek bir şekilde entegre edilmiştir. Android sanal makinesi, hata ayıklayıcının farkında olduğu herhangi bir nesnenin, hata ayıklayıcının bağlantısı kesilene kadar çöp toplama işlemine tabi tutulmamasını garanti eder. Bu durum, hata ayıklayıcı bağlıyken nesnelerin birikmesine neden olabilir. Örneğin, hata ayıklayıcı çalışan bir iş parçacığı görürse iş parçacığı sonlandırılmış olsa bile hata ayıklayıcının bağlantısı kesilene kadar ilişkili Thread
nesnesinde çöp toplama işlemi yapılmaz.
Hata ayıklayıcı türünü değiştirme
Java/Kotlin kodu ve C/C++ kodunda hata ayıklamak için farklı hata ayıklayıcı araçları gerektiğinden Android Studio hata ayıklayıcısı, hangi hata ayıklayıcı türünün kullanılacağını seçmenize olanak tanır. Android Studio, varsayılan olarak Otomatik Olarak Algıla hata ayıklayıcı türünü kullanarak projenizde algıladığı dillere göre hangi hata ayıklayıcının kullanılacağına karar verir.
Hata ayıklama yapılandırmasında hata ayıklayıcıyı manuel olarak seçmek için Çalıştır > Yapılandırmaları Düzenle'yi tıklayın. Ayrıca, Run > Attach debugger to Android process (Çalıştır > Hata ayıklayıcıyı Android işlemine ekle) seçeneğini tıkladığınızda açılan iletişim kutusunda hata ayıklayıcıyı seçebilirsiniz.
Kullanılabilir hata ayıklama türleri şunlardır:
Not: Derleyici tarafından optimize edilmiş yerel kodda hata ayıklarken aşağıdaki uyarı mesajını alabilirsiniz:This function was
compiled with optimizations enabled. Some debugger features may not be
available. Optimizasyon işaretleri kullanıldığında derleyici, derlenmiş kodunuzda daha verimli çalışmasını sağlamak için değişiklikler yapar. Bu durum, hata ayıklayıcının optimize edilmiş derlenmiş kodu orijinal kaynak koduyla eşlemesi zor olduğundan hata ayıklayıcının beklenmedik veya yanlış bilgiler bildirmesine neden olabilir.
Bu nedenle, yerel kodunuzda hata ayıklarken derleyici optimizasyonlarını devre dışı bırakmanız gerekir.
Sistem günlüğünü kullanma
Sistem günlüğü, uygulamanızda hata ayıklarken sistem mesajlarını gösterir. Bu mesajlar, cihazda çalışan uygulamalardan gelen bilgileri içerir. Uygulamanızda hata ayıklamak için sistem günlüğünü kullanmak istiyorsanız kodunuzun günlük mesajları yazdığından ve uygulamanız geliştirme aşamasındayken istisnalar için yığın izlemeyi yazdırdığından emin olun.
Kodunuza günlük mesajları yazma
Kodunuza günlük mesajları yazmak için
Log sınıfını kullanın. Günlük mesajları, uygulamanızla etkileşim kurarken sistem hata ayıklama çıkışını toplayarak yürütme akışını anlamanıza yardımcı olur. Günlük mesajları, uygulamanızın hangi bölümünün başarısız olduğunu da söyleyebilir. Günlüğe kaydetme hakkında daha fazla bilgi için Logcat ile günlükleri yazma ve görüntüleme başlıklı makaleyi inceleyin.
Aşağıdaki örnekte, etkinliğiniz başladığında önceki durum bilgilerinin kullanılabilir olup olmadığını belirlemek için nasıl günlük mesajları ekleyebileceğiniz gösterilmektedir:
Kotlin
import android.util.Log ... class MyActivity : Activity() { ... override fun onCreate(savedInstanceState: Bundle?) { ... if (