Uygulamanızda hata ayıklama

Android Studio, aşağıdakileri ve diğer işlemleri yapmanıza olanak tanıyan bir hata ayıklayıcı sağlar:

  • Uygulamanızın hatalarını ayıklamak için bir cihaz seçin.
  • Java, Kotlin ve C/C++ kodunuzda ayrılma noktaları belirleyin.
  • Değişkenleri inceleyin ve çalışma zamanında ifadeleri değerlendirin.

Bu sayfa, temel hata ayıklayıcı işlemleriyle ilgili talimatlar içerir. Daha fazla belge için IntelliJ IDEA hata ayıklama belgelerine de göz atın.

Hata ayıklamayı etkinleştir

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 geliştirici seçeneklerinden hata ayıklamayı etkinleştirmeniz gerekir.
Hata ayıklaması yapılabilir bir derleme varyantı çalıştırın.

Derleme yapılandırmasında debuggable true (Kotlin komut dosyalarında isDebuggable = true) içeren bir derleme varyantı kullanın.

build.gradle dosyasında görünür olmasa da genellikle her Android Studio projesinde yer alan varsayılan "hata ayıklama" varyantını seçebilirsiniz. Ancak hata ayıklaması gereken yeni derleme türleri tanımlarsanız derleme türüne debuggable true eklemeniz gerekir:

Eski

android {
    buildTypes {
        customDebugType {
            debuggable true
            ...
        }
    }
}

Kotlin

android {
    buildTypes {
        create("customDebugType") {
            isDebuggable = true
            ...
        }
    }
}

Bu özellik, C/C++ kodlu 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 de bağlıysa bu kitaplığın, hata ayıklama sembollerini koruyabilmesi için debuggable true ile de paketlenmesi gerekir. Uygulama projenizin hata ayıklaması yapılabilir varyantlarının, 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şlat

Aşağıdaki şekilde bir hata ayıklama oturumu başlatabilirsiniz:

  1. Uygulamanızın kodunda ayırma noktaları ayarlayın.
  2. Araç çubuğunda, hedef cihaz menüsünden uygulamanızın hatalarını ayıklamak için bir cihaz seçin.
    Hedef cihaz menüsü.
    Şekil 1. Hedef cihaz menüsü.

    Yapılandırılmış bir cihazınız yoksa Android Emulator'ı kullanmak için cihazı USB ile bağlamanız, kablosuz aracılığıyla bir cihazı bağlamanız veya AVD oluşturmanız gerekir.

  3. Araç çubuğundaki Hata ayıkla simgesini tıklayın.

    Uygulamanız zaten cihazda çalışıyorsa Çalıştır'dan Hata Ayıklama'ya geçmek isteyip istemediğinizi soran bir iletişim kutusu gösterilir. Hata ayıklamaya başlanması için cihazın yeniden başlatılması gerekir. Aynı uygulamanın çalışır durumda kalmasını 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ı'yı da çalıştırır.

  4. Hata ayıklama penceresi açık değilse Görünüm > Araç Penceresi > Hata ayıkla'yı seçin veya araç pencere çubuğunda Hata ayıkla simgesini tıklayın.

Hata ayıklayıcıyı çalışan bir uygulamaya ekleme

Uygulamanız halihazırda cihazınızda çalışıyorsa uygulamanızı yeniden başlatmadan şu şekilde hata ayıklamaya başlayabilirsiniz:

  1. Android işlemine hata ayıklayıcı ekle'yi tıklayın.
  2. İşlem Seçin iletişim kutusunda, hata ayıklayıcıyı eklemek istediğiniz işlemi seçin.
    1. Emülatör veya rootlanmış bir cihaz kullanıyorsanız tüm işlemleri görmek için Tüm işlemleri göster'i işaretleyebilirsiniz. Root erişimli bir cihazda bu işlem, cihazda çalışan tüm işlemleri gösterir. Ancak rootlanmamış cihazlarda bu, yalnızca hata ayıklanabilir işlemleri gösterir.
    2. Şu tarihten itibaren Android Hata Ayıklayıcı Ayarlarını Kullan menüsünden mevcut bir çalıştırma/hata ayıklama yapılandırmasını seçebilirsiniz. Bu, C ve C++ kodlarında LLDB başlangıç komutlarını, LLDB ekleme sonrası komutlarını ve simge dizinlerini mevcut bir yapılandırmada yeniden kullanmanıza olanak tanır.
    3. Çalıştırma/hata ayıklama yapılandırmanız yoksa Yeni Oluştur'u seçin. Bu seçim, farklı bir hata ayıklama türü seçebileceğiniz Hata Ayıklama Türü menüsünü etkinleştirir. Varsayılan olarak Android Studio, projenizin Java veya C/C++ kodu içerip içermediğine bağlı olarak sizin için en iyi hata ayıklayıcı seçeneğini belirlemek amacıyla "Otomatik Olarak Hata Ayıklama" türünü kullanır.
  3. Tamam'ı tıklayın.

    Hata ayıklama penceresi görüntülenir.

Cihaz Gezgini'ndeki İşlemler sekmesinde (Görünüm > Araç Penceresi > Cihaz Gezgini) de hata ayıklanabilir işlemlerin listesi yer alır. Buradan bir işlem seçip sonlandırma, zorla durdurma işlemi gerçekleştirebilir veya hata ayıklayıcıyı belirli bir işleme ekleyebilirsiniz.

Hata ayıklama penceresi

Şekil 2.Hata ayıklama penceresi.

Hata ayıklama penceresi,

  1. Yürütme ve gezinme araç çubuğu Bkz. Ayrılma noktalarıyla çalışma
  2. Mesaj dizisi seçici
  3. Değerlendirme ve izleme ifadesi girişi. Değişkenleri inceleme bölümüne bakın.
  4. Yığın ekranı
  5. Değişkenler bölmesi. Değişkenleri inceleme bölümüne bakın.

Not: Android Studio hata ayıklayıcı ve çöp toplayıcı sıkı bir şekilde entegre edilmiştir. Android sanal makine, hata ayıklayıcının algıladığı hiçbir nesnenin, hata ayıklayıcı bağlantısı kesilene kadar atık toplanmayacağı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ığı sona ermiş olsa bile, hata ayıklayıcı bağlantısı kesilene kadar ilişkili Thread nesnesi atık toplanmaz.

Hata ayıklayıcı türünü değiştirme

Java/Kotlin kodunda ve C/C++ kodunda hata ayıklamak için farklı hata ayıklayıcı araçları gerektiğinden, Android Studio hata ayıklayıcı, kullanılacak hata ayıklayıcı türünü seçmenize olanak tanır. Varsayılan olarak Android Studio, 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. Hata ayıklayıcıyı, Çalıştır > Hata ayıklayıcıyı Android işlemine ekle'yi tıkladığınızda görüntülenen iletişim kutusundan da seçebilirsiniz.

Kullanılabilir hata ayıklama türleri şunlardır:

Otomatik Olarak Algıla
Android Studio'nun, hata ayıkladığınız kod için en iyi seçeneği otomatik olarak seçmesini istiyorsanız bu hata ayıklama türünü seçin. Örneğin, projenizde herhangi bir C veya C++ kodu varsa Android Studio otomatik olarak İkili 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'de yazılan kodda hata ayıklamak istiyorsanız bu hata ayıklama türünü seçin. Yalnızca Java hata ayıklayıcı, yerel kodunuzda ayarladığınız kesme noktalarını veya saatleri yoksayar.
Yalnızca Yerel (Yalnızca C/C++ koduyla kullanılabilir)
Kodunuzdaki hataları 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ünü kullanırken Java hata ayıklayıcı oturum görünümü kullanılamaz. LLDB varsayılan olarak yalnızca yerel kodunuzu inceler ve Java kodunuzdaki kesme noktalarını yok sayar. 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 gereksinimleri karşılayan cihazlarda çalışır:

  • Cihaz, run-as özelliğini destekliyor.

    Cihazın run-as 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-name yerine uygulamanızın paket adını girin. Cihaz run-as destekliyorsa komut herhangi bir hata olmadan döndürülür.

  • Cihazda ptrace etkin.

    ptrace hizmetinin 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
    

    ptrace etkinleştirilirse komut, 0 değerini veya unknown key hatasını yazdırır. ptrace etkinleştirilmezse 0 dışında bir değer yazdırır.

Çift (Java + Yerel) - 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, uygulama işleminize hem Java hata ayıklayıcısını hem de LLDB'yi 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 pencere 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ıklamak için, diğeri de -Java tarafından belirtildiği gibi Java kodunda hata ayıklamak için kullanılır.

Şekil 3. Yerel kodda hata ayıklama sekmesi ve Java kodunda hata ayıklama sekmesi.

Not: Derleyici tarafından optimize edilen yerel kodda hata ayıklarken şu uyarı mesajını alabilirsiniz:
This function was compiled with optimizations enabled. Some debugger features may not be available. Optimizasyon işaretleri kullanılırken derleyici, derlenen kodunuzun daha verimli çalışması için kod üzerinde değişiklikler yapar. Bu durum, hata ayıklayıcının, optimize edilmiş derlenen kodu orijinal kaynak koduyla tekrar eşlemesi zor olduğundan hata ayıklayıcının beklenmeyen 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ü kullan

Sistem günlüğü, uygulamanızdaki hataları 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 uygulamanız geliştirme aşamasındayken kodunuzun günlük mesajları yazdığından ve istisnalar için yığın izlemeyi yazdırdığından emin olun.

Kodunuza günlük mesajları yazma

Kodunuzda 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 çıktısını toplayarak yürütme akışını anlamanıza yardımcı olur. Günlük mesajları, uygulamanızın hangi bölümünde sorun olduğunu da bildirebilir. Günlük kaydı hakkında daha fazla bilgi edinmek için Logcat ile günlük yazma ve görüntüleme bölümünü inceleyin.

Aşağıdaki örnekte, etkinliğiniz başladığında önceki durum bilgilerinin kullanılabilir olup olmadığını belirlemek için günlük mesajlarını nasıl ekleyebileceğiniz gösterilmektedir:

Kotlin

import android.util.Log
...
class MyActivity : Activity() {
    ...
    override fun onCreate(savedInstanceState: Bundle?) {
        ...
        if (savedInstanceState != null) {
            Log.d(TAG, "onCreate() Restoring previous state")
            /* restore state */
        } else {
            Log.d(TAG, "onCreate() No saved state available")
            /* initialize app */
        }
        ...
    }
  ...
  companion object {
    private val TAG: String = MyActivity::class.java.simpleName
    ...
  }
}

Java

import android.util.Log;
...
public class MyActivity extends Activity {
    private static final String TAG = MyActivity.class.getSimpleName();
    ...
    @Override
    public void onCreate(Bundle savedInstanceState) {
       ...
       if (savedInstanceState != null) {
            Log.d(TAG, "onCreate() Restoring previous state");
            /* restore state */
        } else {
            Log.d(TAG, "onCreate() No saved state available");
            /* initialize app */
        }
        ...
    }
}

Geliştirme sırasında kodunuz istisnaları yakalayabilir ve yığın izlemeyi (stack trace) sistem günlüğüne yazabilir:

Kotlin

fun someOtherMethod() {
    try {
        ...
    } catch (e : SomeException) {
        Log.d(TAG, "someOtherMethod()", e)
    }
}

Java

void someOtherMethod() {
    try {
        ...
    } catch (SomeException e) {
        Log.d(TAG, "someOtherMethod()", e);
    }
}

Not: Uygulamanızı yayınlamaya hazır olduğunuzda, hata ayıklama günlük mesajlarını ve yığın izleme yazdırma çağrılarını kodunuzdan kaldırın. Bunun için DEBUG işareti oluşturun ve hata ayıklama günlük mesajlarını koşullu ifadelerin içine yerleştirin.

Sistem günlüğünü görüntüle

Hata ayıklama ve diğer sistem mesajlarını, Şekil 4'te gösterildiği gibi Logcat penceresinde görüntüleyebilir ve filtreleyebilirsiniz. Örneğin, atık toplama gerçekleştiğinde mesajları veya Log sınıfıyla uygulamanıza eklediğiniz mesajları görebilirsiniz.

Logcat'i kullanmak için hata ayıklamaya başlayın ve Logcat sekmesini seçin.

Şekil 4. Filtre ayarları bulunan Logcat penceresi.

Logcat ve filtreleme seçeneklerinin açıklaması için Logcat ile günlük yazma ve görüntüleme bölümüne bakın.

Kesme noktalarıyla çalışma

Android Studio, farklı hata ayıklama işlemlerini tetikleyen kırma noktalarını destekler. Birkaç tür ayrılma noktası vardır:

Çizgi ayrılma noktası
En yaygın tür, uygulamanızın belirli bir kod satırında yürütülmesini duraklatan bir satır ayrılma noktasıdır. Duraklatılmış durumdayken değişkenleri inceleyebilir, ifadeleri değerlendirebilir ve ardından çalışma zamanı hatalarının nedenlerini belirlemek için satır satır yürütmeye devam edebilirsiniz.
Yöntem ayrılma noktası
Yöntem ayrılma noktası, belirli bir yönteme girdiğinde veya yöntemden çıktığında uygulamanızın yürütülmesini duraklatır. Duraklatılmış durumdayken değişkenleri inceleyebilir, ifadeleri değerlendirebilir ve ardından çalışma zamanı hatalarının nedenlerini belirlemek için satır satır yürütmeye devam edebilirsiniz. Bir composable işlevde ayrılma noktası ayarladığınızda hata ayıklayıcı, yeniden oluşturma işlemine neden olabilecek değişikliklerin belirlenmesine yardımcı olmak için composable'ın parametrelerini ve durumlarını listeler.
Alan ayrılma noktası
Alan ayrılma noktası, uygulamanız belirli bir alandan okuma veya yazma işlemi yaparken uygulamanızın yürütülmesini duraklatır.
İstisna ayrılma noktası
İstisna ayrılma noktası, bir istisna gerçekleştiğinde uygulamanızın yürütülmesini duraklatır.

Yalnızca belirli koşullar karşılanırsa yürütmeyi askıya alacak koşullu ayrılma noktaları ayarlayabilirsiniz. Ayrıca, yürütmeyi askıya almadan Logcat'e yazan günlük ayrılma noktaları da ayarlayabilirsiniz. Bu, kodunuzun günlük ifadeleriyle dolmasını önlemeye yardımcı olabilir.

Satır ayrılma noktası eklemek için aşağıdaki adımları uygulayın:

  1. Yürütmeyi duraklatmak istediğiniz kod satırını bulun.
  2. İlgili kod satırındaki sol oluğu tıklayın veya düzeltme işaretini satıra yerleştirin ve Control+F8 tuşlarına basın (macOS'te, Command+F8'de).
  3. Uygulamanız zaten çalışıyorsa Android işlemine hata ayıklayıcı ekle'yi tıklayın . Aksi takdirde, hata ayıklamaya başlamak için Hata ayıkla'yı tıklayın.

Şekil 5'te gösterildiği gibi, bir ayrılma noktası ayarladığınızda çizginin yanında kırmızı bir nokta görünür.

Şekil 5. Kesme noktası ayarladığınızda çizginin yanında kırmızı bir nokta görünür.

Kod yürütmeniz ayrılma noktasına ulaştığında Android Studio, uygulamanızın yürütülmesini duraklatır.

Uygulamanın durumunu tespit etmek için Hata Ayıklayıcı sekmesindeki araçları kullanın:

  • Bir değişken için nesne ağacını incelemek için onu Değişkenler görünümünde genişletin. Değişkenler görünümü görünmüyorsa Düzen Ayarları'nı tıklayın ve değişkenlerin işaretlendiğinden emin olun.

  • Yöntem girmeden koddaki sonraki satıra ilerlemek için Step Over tıklayın.

  • Bir yöntem çağrısındaki ilk satıra ilerlemek için Adım Adım tıklayın.

  • Geçerli yöntemin dışında bir sonraki satıra geçmek için Çık tıklayın.

  • Uygulamayı normal şekilde çalıştırmaya devam etmek için Programı Devam Ettir'i tıklayın.

Projeniz herhangi bir yerel kod kullanıyorsa "Otomatik Olarak Hata Ayıklama" türü varsayılan olarak hem Java hata ayıklayıcıyı hem de LLDB'yi uygulamanıza iki ayrı işlem olarak ekler. Uygulamanızı yeniden başlatmadan veya ayarları değiştirmeden Java ve C/C++ ayrılma noktalarını inceleme arasında geçiş yapabilirsiniz.

Not: Android Studio'nun C veya C++ kodunuzdaki ayrılma noktalarını algılayabilmesi için Otomatik Olarak Algıla, Yerel veya İkili gibi LLDB'yi destekleyen bir hata ayıklama türü kullanmanız gerekir. Hata ayıklama yapılandırmanızı düzenleyerek Android Studio'nun kullandığı hata ayıklama türünü değiştirebilirsiniz. Farklı hata ayıklama türleri hakkında daha fazla bilgi edinmek için diğer hata ayıklama türlerini kullanma ile ilgili bölümü okuyun.

Android Studio, uygulamanızı hedef cihazınıza dağıttığında, her hata ayıklayıcı işlemi için Şekil 6'da gösterildiği gibi bir sekme veya hata ayıklama oturum görünümü içeren Hata Ayıklama penceresi açılır.

Şekil 6. LLDB kullanarak yerel kodda hata ayıklama.
  1. LLDB hata ayıklayıcısı C/C++ kodunuzda bir kesme noktasıyla karşılaştığında Android Studio <your-module> sekmesine geçer. Çerçeveler, Değişkenler ve Saatler bölmeleri de kullanılabilir. Bu bölmeler, Java kodunda hata ayıklarken tam olarak aynı şekilde çalışır.

    İleti dizileri bölmesi, LLDB oturum görünümünde bulunmasa da Çerçeveler bölmesindeki listeyi kullanarak uygulama işlemlerinize erişebilirsiniz. Pencere çerçevelerinde hata ayıklama ve değişkenleri inceleme ile ilgili bölümlerde bu bölmeler hakkında daha fazla bilgi edinebilirsiniz.

    Not: Android sistemi, yerel kodunuzdaki bir ayrılma noktasını incelerken uygulamanızın Java bayt kodunu çalıştıran sanal makineyi askıya alır. Bu, yerel kodunuzdaki bir kesme noktasını incelerken Java hata ayıklayıcıyla etkileşimde bulunamayacağınız veya Java hata ayıklayıcı oturumunuzdan durum bilgisi alamayacağınız anlamına gelir.

  2. Java hata ayıklayıcı, Java veya Kotlin kodunuzda bir ayrılma noktasıyla karşılaştığında Android Studio <your-module>-java sekmesine geçer.
  3. LLDB ile hata ayıklarken komut satırı seçeneklerini LLDB'ye iletmek için LLDB oturum görünümündeki LLDB terminalini kullanabilirsiniz. Uygulamanızda hata ayıklamaya her başladığınızda, hata ayıklayıcının uygulama işleminize eklenmesinden hemen önce veya hemen sonra LLDB'nin yürütmesini istediğiniz belirli komutlar varsa bu komutları hata ayıklama yapılandırmanıza ekleyebilirsiniz.

C/C++ kodunda hata ayıklarken uygulamanız belirli bir bellek bloğuyla etkileşime geçtiğinde uygulama işleminizi askıya alabilecek özel ayrılma noktası türlerini (izleme noktaları) ayarlayabilirsiniz. Daha fazla bilgi edinmek için izleme noktası ekleme ile ilgili bölümü okuyun.

Kesme noktalarını görüntüleme ve yapılandırma

Tüm ayrılma noktalarını görüntülemek ve kesme noktası ayarlarını yapılandırmak için Hata Ayıklama penceresinde Kırma Noktalarını Görüntüle'yi tıklayın. Şekil 7'de gösterildiği gibi, ayrılma noktaları penceresi görünür.

Şekil 7. Kesme noktaları penceresi, mevcut tüm ayrılma noktalarını listeler ve her biri için davranış ayarlarını içerir.

Kesme noktaları penceresi, bölmedeki listeden her bir ayrılma noktasını etkinleştirebilmenizi veya devre dışı bırakabilmenizi sağlar. Kesme noktası devre dışı bırakılırsa Android Studio, uygulamanızı bu kesme noktasına ulaştığında duraklatmaz.

Listeden bir ayrılma noktası seçerek ayarlarını yapılandırın. Bir ayrılma noktasını ilk başta devre dışı bırakılacak şekilde yapılandırabilir ve farklı bir ayrılma noktası isabet ettiğinde sistem tarafından etkinleştirmesini sağlayabilirsiniz. Bir ayrılma noktasının isabetten sonra devre dışı bırakılıp bırakılmayacağını da yapılandırabilirsiniz. Herhangi bir istisna için ayrılma noktası ayarlamak isterseniz ayrılma noktaları listesinde İstisna Ayrılma Noktaları'nı seçin.

Tüm kesme noktalarını geçici olarak devre dışı bırakmak için Hata Ayıklama penceresinde Ayrılma Noktalarının Sesini Kapat seçeneğini tıklayın. Yeniden etkinleştirmek için tekrar tıklayın.

Pencere çerçevelerinde hata ayıklama

Hata Ayıklayıcı penceresinde Çerçeveler bölmesi, geçerli ayrılma noktasının isabetine neden olan yığın çerçevesini incelemenize olanak tanır. Bu şekilde, yığın çerçevesinde gezinip inceleyebilir ve ayrıca Android uygulamanızdaki ileti dizilerinin listesini inceleyebilirsiniz.

İleti dizisi seçmek için ileti dizisi seçici menüsünü kullanın ve yığın çerçevesini görüntüleyin. Kaynağı düzenleyicide açmak için çerçevedeki öğeleri tıklayın. Ayrıca, ileti dizisi sunumunu özelleştirebilir ve yığın çerçevesini, Çerçeveleri İnceleme kılavuzunda açıklandığı şekilde dışa aktarabilirsiniz.

Değişkenleri inceleme

Hata Ayıklayıcı penceresindeki Değişkenler bölmesi, sistem uygulamanızı bir ayrılma noktasında durdurduğunda ve Çerçeveler bölmesinden bir kare seçtiğinizde değişkenleri incelemenize olanak tanır. Değişkenler bölmesi ayrıca, geçici ifadeleri seçili çerçevede bulunan statik yöntemleri ve/veya değişkenleri kullanarak değerlendirmenize olanak tanır.

Nesne ağacına (uygulamada hata ayıklanırken) ifade eklemek için:

Şekil 8. Hata ayıklama penceresindeki nesne ağacı ve ifade giriş kutusu.
  1. İzlenecek veya gösterilecek ifadeyi girin
  2. Saatlere ekle'yi tıklayın veya ifadeyi bir kez değerlendirmek için Enter tuşuna basın.

Alternatif olarak, nesne ağacı, izlemek istediğiniz ifadeyi içeriyorsa bu ağacı, izlenen ifade olarak eklemek için ağacın üst kısmına sürükleyebilirsiniz.

İzlenen ifadeler, ayrılma noktalarına isabet ettiğinizde veya kodunuzda ilerlediğinizde güncellenir.

Değerlendirilen ifadeler, siz başka bir ifadeyi manuel olarak değerlendirene veya kodunuzda adım adım ilerleyinceye kadar nesne ağacının en üstünde görüntülenmeye devam eder.

İzlenen bir ifadeyi nesne ağacından kaldırmak için ifadeyi sağ tıklayın, ardından İzlemeyi Kaldır'ı tıklayın.

İzleme noktaları ekle

C/C++ kodunda hata ayıklarken uygulamanız belirli bir bellek bloğuyla etkileşime geçtiğinde uygulama işleminizi askıya alabilecek özel ayrılma noktası türleri (izleme noktaları) ayarlayabilirsiniz. Örneğin, bir bellek blokuna iki işaretçi ayarlar ve buna bir izleme noktası atarsanız bu bellek blokuna erişmek için iki işaretçiden birini kullanmak izleme noktasını tetikler.

Android Studio'da, belirli bir değişkeni seçerek çalışma zamanı sırasında bir izleme noktası oluşturabilirsiniz ancak LLDB, izleme noktasını değişkenin kendisine değil, yalnızca sistemin söz konusu değişkene ayırdığı bellek bloğuna atar. Bu, bir değişkenin değerini gözlemlemenizi sağlayan ancak sistem, bellekteki değerini okuduğunda veya değiştirdiğinde uygulama işleminizi askıya almanıza izin vermeyen Saatler bölmesine değişken eklemekten farklıdır.

Not: Uygulama işleminiz bir işlevden çıktığında ve sistem, yerel değişkenlerini bellekten ayırdığında, bu değişkenler için oluşturduğunuz tüm izleme noktalarını yeniden atamanız gerekir.

İzleme noktası ayarlamak için aşağıdaki koşulları karşılamanız gerekir:

  • Hedeflediğiniz fiziksel cihaz veya emülatörde x86 ya da x86_64 CPU kullanılıyor. Cihazınız ARM CPU kullanıyorsa değişkeninizin bellekteki adresinin sınırını 32 bit işlemciler için 4 bayt veya 64 bit işlemciler için 8 bayt olacak şekilde hizalamanız gerekir. Yerel kodunuzdaki bir değişkeni hizalamak için aşağıda gösterildiği gibi değişken yavaşlamasında __attribute__((aligned(num_bytes))) değerini belirtin:
    // For a 64-bit ARM processor
    int my_counter __attribute__((aligned(8)));
    
  • Daha önce üç veya daha az izleme noktası atadınız. Android Studio x86 veya x86_64 hedef cihazlarda en fazla dört izleme noktasını destekler. Diğer cihazlar daha az izleme noktasını destekleyebilir.

Not: Uygulamanızın hatalarını 32 bit ARM ABI'leriyle ayıklarken, değerlerini incelemek için izleme noktası eklemek veya fareyle kod içindeki değişkenlerin üzerine gelmek kilitlenmeye neden olabilir. Geçici bir çözüm olarak 64 bit ARM, x86 veya x86_64 ikili programları kullanarak hata ayıklayın. Bu sorun, Android Studio'nun yeni sürümünde düzeltilecektir.

Şartları karşılıyorsanız aşağıdaki şekilde izleme noktası ekleyebilirsiniz:

  1. Uygulamanız bir ayrılma noktasında askıya alınmış durumdayken LLDB oturum görünümündeki Değişkenler bölmesine gidin.
  2. İzlemek istediğiniz bellek bloğunu kaplayan bir değişkeni sağ tıklayıp İzleme Noktası Ekle'yi seçin.

    Şekil 9. Bellekteki bir değişkene izleme noktası ekleyin.
  3. Şekil 9'da gösterildiği gibi, izleme noktanızı yapılandırmak için bir iletişim kutusu görüntülenir.

    İzleme noktanızı aşağıdaki seçeneklerle yapılandırın:

    • Etkin: Android Studio'ya, ayarı değiştirene kadar izleme noktasını yoksaymasını bildirmek istiyorsanız bu seçeneğin işaretini kaldırın. Android Studio, daha sonra erişebilmeniz için izleme noktanızı kaydeder.
    • Askıya alma: Android sistemi, varsayılan olarak izleme noktasına atadığınız bellek blokuna eriştiğinde uygulama işleminizi askıya alır. Bu davranışı istemiyorsanız bu seçeneğin işaretini kaldırın. Bu bölümde, sistem izleme noktanızla etkileşime geçtiğinde davranışı özelleştirmek için kullanabileceğiniz ek seçenekler gösterilir: Mesajı konsola günlüğe kaydet ve İsabet olduğunda kaldır.
    • Erişim Türü: Uygulamanızın, sistemin değişkene ayırdığı bellek bloğuna Okuma veya Yazma yapmaya çalıştığında izleme noktanızı tetikleyip tetiklemeyeceğini seçin. Okuma veya yazma işleminde izleme noktanızı tetiklemek için Herhangi biri'yi seçin.
  4. Bitti'yi tıklayın.

Tüm izleme noktalarınızı görüntülemek ve izleme noktası ayarlarını yapılandırmak için Hata Ayıklama penceresinde Kırma Noktalarını Görüntüle'yi tıklayın. Kesme noktaları iletişim kutusu Şekil 10'da gösterildiği gibi görünür.

Şekil 10. Kesme Noktaları iletişim kutusunda, mevcut izleme noktalarınız listelenir ve her biri için davranış ayarları yer alır.

İzleme noktanızı ekledikten sonra uygulama işleminizi devam ettirmek için Hata Ayıklama penceresinde Programı Devam Ettir'i tıklayın. Varsayılan olarak, uygulamanız izleme noktası ayarladığınız bir bellek blokuna erişmeye çalışırsa Android sistemi uygulama işleminizi askıya alır ve Şekil 11'de gösterildiği gibi uygulamanızın en son yürüttüğü kod satırının yanında bir izleme noktası simgesi görünür.

Şekil 11. Android Studio, uygulamanızın bir izleme noktasını tetiklemeden hemen önce yürüttüğü kod satırını gösterir.

Kaynak değeri görüntüleme biçimini görüntüleme ve değiştirme

Hata ayıklama modunda, Java veya Kotlin kodunuzdaki değişkenler için kaynak değerlerini görüntüleyebilir ve farklı görüntüleme biçimi seçebilirsiniz. Değişkenler sekmesi görüntüleniyor ve bir çerçeve seçiliyken aşağıdakileri yapın:

  1. Değişkenler listesinde, listeyi görüntülemek için kaynak satırında herhangi bir yeri sağ tıklayın.
  2. Listede View as'i (Farklı görüntüle) seçin ve kullanmak istediğiniz biçimi belirleyin.

    Kullanılabilir biçimler, seçtiğiniz kaynağın veri türüne bağlıdır. Aşağıdaki seçeneklerden birini veya daha fazlasını görebilirsiniz:

    • Sınıf: Sınıf tanımını görüntüleyin.
    • toString: Görüntüleme dizesi biçimini gösterir.
    • Nesne: Nesne (sınıfın bir örneği) tanımını görüntüleyin.
    • Dizi: Dizi biçiminde görüntülenir.
    • Zaman damgası: Tarihi ve saati şu şekilde görüntüleyin: yyyy-aa-gg ss:dd:ss.
    • Otomatik: Android Studio, veri türüne göre en iyi biçimi seçer.
    • İkili: Sıfırları ve birleri kullanarak ikili değeri görüntüleyin.
    • MeasureSpec: Üst öğeden seçili alt öğeye iletilen değer. MeasureSpec başlıklı makaleyi inceleyin.
    • Onaltılık: Onaltılık değer olarak gösterilir.
    • Primitif: Temel veri türünü kullanarak sayısal bir değer olarak görüntüleyin.
    • Tam sayı: Integer türünde sayısal bir değer olarak gösterilir.

Özel biçim oluşturmak için aşağıdakileri yapın:

  1. Kaynak değerini sağ tıklayın.
  2. Şu kullanıcı olarak görüntüle'yi seçin.
  3. Oluştur'u seçin.
  4. Java Veri Türü Oluşturucular iletişim kutusu görüntülenir. Java Veri türü oluşturucuları bölümündeki talimatları uygulayın.