Uygulamanızda hata ayıklama

Android Studio, aşağıdakileri ve daha fazlasını yapmanıza olanak tanıyan bir hata ayıklayıcı sağlar:

  • Uygulamanızda hata ayıklama yapacağınız cihazı seçin.
  • Java, Kotlin ve C/C++ kodunuzda ayrılma noktaları belirleyin.
  • 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ını da inceleyin.

Hata ayıklamayı etkinleştirme

Hata ayıklama işlemine 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çeneklerinde hata ayıklamayı etkinleştirmeniz gerekir.
Hata ayıklanabilir bir derleme varyantını ç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ıklama yapılabilir olması gereken yeni derleme türleri tanımlarsanız derleme türüne debuggable true eklemeniz gerekir:

Groovy

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 mülkü artık kullanılmıyor.

Uygulamanız, hata ayıklama yapmak istediğiniz bir kitaplık modülüne bağlıysa bu kitaplık da hata ayıklama simgelerini koruyabilmesi için debuggable true ile paketlenmelidir. Uygulama projenizin hata ayıklama yapılabilir varyantlarının, bir kitaplık modülünün hata ayıklama yapılabilir varyantını aldığını doğrulamak için kitaplığınızın varsayılan olmayan sürümlerini yayınlayın.

Hata ayıklamayı başlatma

Hata ayıklama oturumu başlatmak için aşağıdaki adımları uygulayın:

  1. Uygulamanızın kodunda durak noktaları ayarlayın.
  2. Araç çubuğunda, hedef cihaz menüsünden uygulamanızda hata ayıklama yapacağınız cihazı seçin.
    Hedef cihaz menüsü.
    Şekil 1. Hedef cihaz menüsü.

    Yapılandırılmış cihazınız yoksa Android Emulator'u kullanmak için bir cihazı USB üzerinden bağlamanız, bir cihazı kablosuz ağ üzerinden bağlamanız veya bir AVD oluşturmanız gerekir.

  3. Araç çubuğunda Hata ayıkla'yı tıklayın.

    Uygulamanız cihazda zaten çalışıyorsa Çalıştır'dan Hata Ayıklama'ya geçmek isteyip istemediğinizi soran bir iletişim kutusu gösterilir. Hata ayıklama işlemine 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ıklama'yı İptal Et'i tıklayın ve bunun yerine hata ayıklayıcıyı çalışan bir uygulamaya bağlayın. Aksi takdirde Android Studio bir APK oluşturur, bu APK'yı 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ıklama yapmak için Hata Ayıklama penceresinde LLDB hata ayıklayıcısını 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 cihazınızda zaten çalışıyorsa uygulamanızı yeniden başlatmadan aşağıdaki adımları uygulayarak hata ayıklama işlemine başlayabilirsiniz:

  1. Android işlemine hata ayıklayıcı ekle'yi tıklayın.
  2. İşlem Seç iletişim kutusunda, hata ayıklayıcıyı eklemek istediğiniz işlemi seçin.
    1. Emülatör veya köklü 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, köklendirilmemiş bir cihazda yalnızca hata ayıklama yapılabilir süreçler gösterilir.
    2. Android hata ayıklayıcı ayarlarını şuradan kullan menüsünden mevcut bir çalıştırma/hata ayıklama yapılandırması seçebilirsiniz. C ve C++ kodunda bu, LLDB başlangıç komutlarını, LLDB sonrası ekleme komutlarını ve mevcut bir yapılandırmadaki simge dizinlerini yeniden kullanmanıza olanak tanır.
    3. Mevcut bir ç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 işlemi kapatabilir , zorla durdurabilir veya hata ayıklayıcıyı belirli bir işleme bağlayabilirsiniz .

Hata ayıklama penceresi

Şekil 2.Hata ayıklama penceresi.

Hata ayıklama penceresi şu bölümlere ayrılır:

  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. Grup görüntüleme
  5. Değişkenler bölmesi. Değişkenleri inceleme başlıklı makaleyi inceleyin.

Not: Android Studio hata ayıklayıcısı ve çöp toplayıcısı gevşek bir şekilde entegre edilmiştir. Android sanal makinesi, hata ayıklayıcının bildiği hiçbir nesnenin, hata ayıklayıcının bağlantısı kesilene kadar çöp toplanmaması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 kodu ve C/C++ kodunda hata ayıklama için farklı hata ayıklayıcı araçları gerektiğinden Android Studio hata ayıklayıcısı, kullanılacak hata ayıklayıcı türü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. Çalıştır > Android işlemine hata ayıklayıcı ekle'yi tıkladığınızda görünen iletişim kutusunda da hata ayıklayıcıyı 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 C veya C++ kodunuz 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'de yazılan kodda hata ayıklamak istiyorsanız bu hata ayıklama türünü seçin. Yalnızca Java'ya yönelik hata ayıklayıcı, yerel kodunuzda belirlediğiniz tüm kesme noktalarını veya izlemeleri yoksayar.
Yalnızca Yerel (yalnızca C/C++ kodunda kullanılabilir)
Kodunuzda 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ıklama yapmak 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'ü 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ı yazın. Cihaz run-as destekliyorsa komut herhangi bir hata olmadan döndürülür.

  • Cihazda ptrace etkin.

    ptrace'ün 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 etkinse komut 0 değerini veya unknown key hatasını yazdırır. ptrace etkinleştirilmezse 0 dışında bir değer yazdırılı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, hem Java hata ayıklayıcıyı hem de LLDB'yi uygulamanıza bağlar. 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.

2. resimde, Hata Ayıklama penceresi başlığının sağındaki iki sekmeye dikkat edin. Uygulamada hem Java hem de C++ kodu bulunduğundan, -java ile belirtildiği gibi bir sekme yerel kodda, diğeri ise Java kodunda hata ayıklama içindir.

Ş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ıklama yaparken şu 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ı 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ıklama yaparken derleyici optimizasyonlarını devre dışı bırakmanız gerekir.

Sistem günlüğünü kullanma

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ıklama yapmak 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ığı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şimde bulunurken 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 kısmının başarısız olduğunu da size bildirebilir. Günlük kaydı hakkında daha fazla bilgi için Logcat ile günlük yazma ve görüntüleme başlıklı makaleyi inceleyin.

Aşağıdaki örnekte, etkinliğiniz başladığında önceki durum bilgilerinin kullanılıp kullanılamayacağını belirlemek için nasıl günlük mesajları ekleyeceğ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 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 bir DEBUG işareti belirleyin ve hata ayıklama günlük mesajlarını koşullu ifadelerin içine yerleştirin.

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

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

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

Şekil 4. Filtre ayarlarını içeren Logcat penceresi.

Logcat ve filtreleme seçenekleri hakkında bilgi edinmek için Logcat ile günlük yazma ve görüntüleme başlıklı makaleyi inceleyin.

Kesme noktalarıyla çalışma

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

Satır kesme 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 kesme noktası
Yöntem kesme noktası, uygulamanız belirli bir yönteme girdiğinde veya bu 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 yürütmeyi satır satır devam ettirerek çalışma zamanındaki hataların nedenlerini belirleyebilirsiniz. Bir birleştirilebilir işlevde durma noktası belirlediğinizde hata ayıklayıcı, yeniden derlemeye hangi değişikliklerin neden olmuş olabileceğini belirlemenize yardımcı olmak için birleştirilebilir öğenin parametrelerini ve durumlarını listeler.
Alan kesme noktası
Alan kesme noktası, belirli bir alandan veri okurken veya belirli bir alana veri yazarken uygulamanızın yürütülmesini duraklatır.
İstisna kesme noktası
İstisna duraklatma noktası, istisna oluştuğunda uygulamanızın yürütülmesini duraklatır.

Yalnızca belirli koşullar karşılandığında yürütmeyi duraklatacak koşullu kesme noktaları ayarlayabilirsiniz. Ayrıca, yürütmeyi askıya almadan Logcat'e yazan günlük ayrılma noktaları da ayarlayabilirsiniz. Bu sayede, kodunuzu günlük ifadeleriyle doldurmaktan kaçınabilirsiniz.

Satır kesme 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 imleci satıra yerleştirip 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 . Hata ayıklamayı başlatmak için Hata ayıkla'yı tıklayın.

Şekil 5'te gösterildiği gibi, bir kesme noktası belirlediğinizde çizginin yanında kırmızı bir nokta görünür.

Şekil 5. Bir kesme noktası belirlediğinizde satırın yanında kırmızı bir nokta görünür.

Kod yürütmeniz kesme noktasına ulaştığında Android Studio, uygulamanızın yürütmesini 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.

  • Bir yöntem girmeden koddaki bir sonraki satıra geçmek için Atla'yı tıklayın.

  • Bir yöntem çağrısının ilk satırına gitmek için İçeri adım düğmesini tıklayın.

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

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

Projenizde yerel kod kullanılıyorsa varsayılan olarak Otomatik Olarak Tespit Et hata ayıklama türü, 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++ durma noktalarını inceleme arasında geçiş yapabilirsiniz.

Not: Android Studio'nun C veya C++ kodunuzdaki kesme noktalarını algılaması için LLDB'yi destekleyen bir hata ayıklama türü (ör. Otomatik Olarak Algıla, Yerel veya Çift) 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 Hata Ayıklama penceresi, Şekil 6'da gösterildiği gibi her hata ayıklayıcı işlemi için bir sekme veya hata ayıklama oturumu görünümüyle açılır.

Şekil 6. LLDB'yi kullanarak yerel kodda hata ayıklama.
  1. LLDB hata ayıklayıcısı, C/C++ kodunuzda bir kesme noktasına rastladığında Android Studio <your-module> sekmesine geçer. Çerçeveler, Değişkenler ve İzleyiciler bölmeleri de kullanılabilir ve Java kodunda hata ayıklama işlemi yapıyormuşsunuz gibi çalışır.

    LLDB oturum görünümünde Mesaj dizileri bölmesi kullanılamaz ancak Çerçeveler bölmesinde bulunan 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 edinin.

    Not: Android sistemi, yerel kodunuzdaki bir kesme noktasını incelerken uygulamanızın Java ikili 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ıklama yaparken komut satırı seçeneklerini LLDB'ye iletmek için LLDB oturumu görünümündeki LLDB terminalini kullanabilirsiniz. Uygulamanızda hata ayıklama işlemine her başladığınızda LLDB'nin yürütmesini istediğiniz belirli komutlar varsa hata ayıklayıcı uygulama işleminize bağlanmadan hemen önce veya hemen sonra bu komutları hata ayıklama yapılandırmanıza ekleyebilirsiniz.

C/C++ kodunda hata ayıklama yaparken, uygulamanız belirli bir bellek bloğuyla etkileşime geçtiğinde uygulama işleminizi askıya alabilecek gözlem noktaları adı verilen özel kesme noktası türleri de ayarlayabilirsiniz. Daha fazla bilgi edinmek için gözetleme noktası ekleme ile ilgili bölümü okuyun.

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

Tüm kesme noktalarını görüntülemek ve kesme noktası ayarlarını yapılandırmak için hata ayıklama penceresinde Kesme noktalarını görüntüle'yi tıklayın. Şekil 7'de gösterildiği gibi Kesme noktaları penceresi görünür.

Şekil 7. Kesme noktaları penceresinde mevcut tüm kesme noktaları listelenir ve her birinin davranış ayarları yer alır.

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

Ayarlarını yapılandırmak için listeden bir kesme noktası seçin. Bir kesme noktasını ilk başta devre dışı olacak şekilde yapılandırabilir ve farklı bir kesme noktasına ulaşıldığında sistemin bunu etkinleştirmesini sağlayabilirsiniz. Bir kesme noktasının, vurulmasından sonra devre dışı bırakılıp bırakılmayacağını da yapılandırabilirsiniz. İstisnalar için kesme noktası ayarlamak istiyorsanız kesme noktaları listesinde İstisna Kesme Noktaları'nı seçin.

Tüm kesme noktalarını geçici olarak devre dışı bırakmak için Hata Ayıklama penceresinde Kırma Noktalarının Sesini Kapat seçeneğini tıklayın. Tekrar tıklayarak yeniden etkinleştirin.

Pencere çerçevelerini hata ayıklama

Hata Ayıklama Aracı penceresindeki Çerçeveler bölmesi, geçerli kesme noktasına ulaşılmasına 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.

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

Değişkenleri inceleme

Hata Ayıklama Aracı penceresindeki Değişkenler bölmesi, sistem uygulamanızı bir kesme noktasında durdurduğunda ve Çerçeveler bölmesinden bir çerçeve seçtiğinizde değişkenleri incelemenize olanak tanır. Değişkenler bölmesi, statik yöntemleri ve/veya seçili karede bulunan değişkenleri kullanarak ad hoc ifadeleri değerlendirmenize de olanak tanır.

Nesne ağacına ifade eklemek için (uygulamadaki hata ayıklaması sırasında):

Ş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, izlemek istediğiniz ifade nesne ağacındaysa izlenen ifade olarak eklemek için ifadeyi ağacın üst kısmına sürükleyebilirsiniz.

İzlenen ifadeler, kesme noktalarına ulaşıldığında veya kodunuzda adım atıldığında güncellenir.

Değerlendirilen ifadeler, siz başka bir ifadeyi manuel olarak değerlendirene veya kodunuzda adım adım ilerleyene 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 ve ardından İzlemeyi Kaldır'ı tıklayın.

Dikkat edilmesi gereken noktalar ekleme

C/C++ kodunda hata ayıklama yaparken, uygulamanız belirli bir bellek bloğuyla etkileşime geçtiğinde uygulama işleminizi askıya alabilecek gözlem noktaları adı verilen özel kesme noktası türleri ayarlayabilirsiniz. Örneğin, bir bellek bloğuna iki işaretçi ayarlar ve bu işaretçiye bir izleme noktası atarsanız bu bellek bloğuna erişmek için bu işaretçilerden herhangi birini kullandığınızda izleme noktası tetiklenir.

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şkenlerinin bellekteki ayrılmış alanını kaldırdığında bu değişkenler için oluşturduğunuz 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örünüz, x86 ya da x86_64 CPU kullanıyor. Cihazınızda ARM CPU kullanılı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 ayarlamanız gerekir. Yerel kodunuzda bir değişkeni hizalamak için aşağıdaki gibi değişken yavaşlatmada __attribute__((aligned(num_bytes))) değerini belirtin:
    // For a 64-bit ARM processor
    int my_counter __attribute__((aligned(8)));
  • Üç veya daha az izleme noktası atamış olmanız gerekir. Android Studio, x86 veya x86_64 hedef cihazlarda yalnızca dört izleme noktasını destekler. Diğer cihazlar daha az izleme noktası destekleyebilir.

Not: 32 bit ARM ABI'leri kullanarak uygulamanızda hata ayıklama yaparken, izleme noktası eklemek veya koddaki değişkenlerin değerlerini incelemek için fareyle değişkenlerin üzerine gelmek kilitlenmeye neden olabilir. Geçici çözüm olarak 64 bit ARM, x86 veya x86_64 ikililerini kullanarak hata ayıklama yapın. Bu sorun, yakında kullanıma sunulacak Android Studio sürümünde düzeltilecektir.

Koşulları karşılıyorsanız aşağıdaki adımları uygulayarak izleme noktası ekleyebilirsiniz:

  1. Uygulamanız bir kesme noktasında askıya alınmışken LLDB oturum görünümünüzdeki 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ı ekleme.
  3. Şekil 9'da gösterildiği gibi, izleme noktanızı yapılandırabileceğiniz 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ı söylemek 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 bir izleme noktasına atadığınız bir hafıza bloğuna eriştiğinde uygulamanızın işlemini askıya alır. Bu davranışı istemiyorsanız bu seçeneğin işaretini kaldırın. Bu sayfada, sistem izleme noktanızla etkileşime geçtiğinde davranışı özelleştirmek için kullanabileceğiniz ek seçenekler gösterilir: İletiyi konsola kaydet ve İlgili öğeye dokunulduğunda kaldır.
    • Erişim Türü: Uygulamanızın, sisteme atanan değişkene ait hafıza bloğunu Okuma veya Yazma işlemi yapmaya çalışırken izleme noktasını 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 İzleme noktalarını görüntüle'yi tıklayın. Şekil 10'da gösterildiği gibi Kesme noktaları iletişim kutusu görünür.

Şekil 10. Kesme noktaları iletişim kutusunda mevcut izleme noktalarınız listelenir ve her birinin davranış ayarları gösterilir.

İ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, kaynak değerlerini görüntüleyebilir ve Java veya Kotlin kodunuzdaki değişkenler için farklı bir 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 bir kaynak satırının herhangi bir yerini sağ tıklayın.
  2. Listeden Şöyle göster'i ve kullanmak istediğiniz biçimi seçin.

    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: Dize biçimini görüntüleyin.
    • Nesne: Nesnenin (sınıf örneği) tanımını görüntüleyin.
    • Dizi: Dizi biçiminde görüntülenir.
    • Zaman damgası: Tarih ve saati şu şekilde gösterin: yyyy-aa-gg ss:dd:ss.
    • Otomatik: Android Studio, veri türüne göre en iyi biçimi seçer.
    • İkili: Sıfır ve birler kullanarak ikili bir değer gösterin.
    • MeasureSpec: Üst öğeden seçili alt öğeye aktarılan değerdir. MeasureSpec başlıklı makaleyi inceleyin.
    • On altılık: On altılık değer olarak görüntülenir.
    • Basit: Basit veri türü kullanılarak sayısal değer olarak görüntülenir.
    • Tam sayı: Integer türündeki 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 şekilde göster'i 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şturma araçları bölümündeki talimatları uygulayın.