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ızın hatalarını ayıklamak için bir cihaz seçin.
  • Java, Kotlin ve C/C++ kodunuzda kesme noktaları ayarlayın.
  • Çalışma zamanında değişkenleri inceleyin ve ifadeleri değerlendirin.

Bu sayfa temel hata ayıklayıcı işlemleriyle ilgili talimatları içerir. Daha fazla doküman için IntelliJ IDEA hata ayıklama belgelerine 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 özelliği 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ılabilecek 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.

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

Modern

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

Kotlin

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

Bu özellik, C/C++ kodu olan modüller için de geçerlidir.

Not: jniDebuggable özelliği artık kullanılmamaktadır.

Uygulamanızda hata ayıklamak istediğiniz bir kitaplık modülü de bulunuyorsa bu kitaplık, hata ayıklama sembollerini koruyabilmesi için debuggable true ile paketlenmelidir. Uygulama projenizin hata ayıklaması yapılabilir varyantlarının kitaplık modülünün hata ayıklaması yapılabilir varyantını almasını sağlamak için kitaplığınızın varsayılan olmayan sürümlerini yayınlayın.

Hata ayıklamayı başlat

Hata ayıklama oturumunu aşağıdaki şekilde 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ıklayacağınız cihazı seçin.
    Hedef cihaz menüsü.
    Şekil 1. Hedef cihaz menüsü.

    Yapılandırılmış herhangi bir cihazınız yoksa Android Emülatörü kullanmak için cihazı USB ile bağlamanız, cihazı kablosuz ağ üzerinden bağlamanız veya 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çiş yapmak 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ğini çalışır durumda tutmak 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, 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 penceresindeki 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ç Pencereleri > Hata Ayıkla'yı seçin veya araç penceresi çubuğunda Hata Ayıkla'yı tıklayın.

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

Uygulamanız zaten cihazınızda çalışıyorsa aşağıdaki adımları izleyerek uygulamanızı yeniden başlatmadan hata ayıklamaya başlayabilirsiniz:

  1. Hata ayıklayıcıyı Android işlemine 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ış bir cihazda yalnızca hata ayıklaması yapılabilecek işlemler gösterilir.
    2. Android Hata Ayıklayıcı Ayarlarını Kullan menüsünde mevcut bir çalıştırma/hata ayıklama yapılandırması seçebilirsiniz. C ve C++ kodunda bu işlem, mevcut bir yapılandırmada LLDB başlangıç komutlarını, LLDB ekleme sonrası komutlarını ve 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. 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 Algıla hata ayıklama türünü kullanır.
  3. OK (Tamam) seçeneğini tıklayın.

    Hata ayıklama penceresi görünür.

Cihaz Gezgini'ndeki İşlemler sekmesinde (Görünüm > Araç Pencereleri > Cihaz Gezgini) hata ayıklanabilir işlemlerin bir listesi de bulunur. 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 görünümü
  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ı tamamen entegre edilmiştir. Android sanal makinesi, hata ayıklayıcının farkında olduğu herhangi bir nesnenin, hata ayıklayıcı bağlantısı kesilene kadar atık 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 ileti dizisi sona ermiş olsa bile, ilişkili Thread nesnesi, hata ayıklayıcının bağlantısı kesilene kadar çöp olarak toplanmaz.

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. 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. Çalıştır > Android işlemine hata ayıklayıcı ekle'yi tıkladığınızda görüntülenen iletişim kutusunda hata ayıklayıcıyı 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 otomatik olarak en iyi seçeneği belirlemesini 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ı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 kesme noktalarını veya saatleri yoksayar.
Yalnızca Yerel (yalnızca C/C++ kodu ile kullanılabilir)
Kodunuzda hata ayıklamak için yalnızca LLDB kullanmak istiyorsanız bu hata ayıklama türünü seçin. Bu hata ayıklama türü kullanılırken Java hata ayıklayıcı oturum 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 gereksinimleri karşılayan cihazlarda çalışır:

  • Cihaz run-as işletim sistemini destekliyor.

    Cihazın run-as'i 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 özelliğini destekliyorsa komut herhangi bir hata olmadan dönecektir.

  • Cihazda ptrace etkin.

    ptrace özelliğinin etkinleştirilip etkinleştirilmediğini 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 bir 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, 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ğında yer alan iki sekmeye dikkat edin. Uygulama hem Java hem de C++ kodu içerdiğinden, sekmelerden biri yerel kodda, diğeri ise Java kodunda hata ayıklama için kullanılır. -java ile belirtilir.

Ş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. Derleyici, optimizasyon işaretlerini kullanırken derlenen kodunuzda değişiklik yaparak kodun daha verimli çalışmasını sağlar. Bu durum, hata ayıklayıcının beklenmedik veya yanlış bilgiler raporlamasına neden olabilir. Bunun nedeni, hata ayıklayıcının, optimize edilmiş derlenmiş kodu orijinal kaynak koduyla geri eşlemesini zorlaştırmasıdır. Bu nedenle, yerel kodunuzda hata ayıklarken derleyici optimizasyonlarını devre dışı bırakmanız gerekir.

Sistem günlüğünü kullanma

Siz uygulamanızda hata ayıklama işlemi yaparken sistem günlüğü, sistem mesajlarını gösterir. Bu mesajlar arasında cihazda çalışan uygulamalardan gelen bilgiler yer alır. 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

Kodunuzda 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. Ayrıca günlük mesajları, uygulamanızın hangi bölümünün başarısız olduğunu da gösterebilir. Günlük kaydı hakkında daha fazla bilgi için Logcat ile günlük yazma ve görüntüleme bölümüne bakın.

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ğinizi görebilirsiniz:

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ı yakalayıp yığın izlemeyi sistem günlüğüne de 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 ayarlayın ve hata ayıklama günlük mesajlarını koşullu ifadelerin içine yerleştirin.

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

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

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

Şekil 4. Filtre ayarlarının gösterildiği logcat penceresi.

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

Ayrılma noktalarıyla çalışma

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

Çizgi ayrılma noktası
En yaygın tür, belirli bir kod satırında uygulamanızın 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 yürütme işlemini satır satır devam edebilirsiniz.
Yöntem ayrılma noktası
Yöntem ayrılma noktası, uygulamanız 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 yürütme işlemini satır satır devam edebilirsiniz.
Alan ayrılma noktası
Alan ayrılma noktası, belirli bir alandan okuma veya yazma işlemi yapan uygulamanızın yürütülmesini duraklatır.
İstisna kesme noktası
İstisna olarak ayarlanan ayrılma noktası, uygulamanız belirli bir alandan veri okuduğunda veya alana yazdığında yürütülmesini duraklatır.

Yalnızca belirli koşullar karşılanırsa yürütmeyi askıya alacak koşullu kesme noktaları ayarlayabilirsiniz. Yürütmeyi askıya almadan Logcat'e veri yazan günlük kaydı kesme noktaları da ayarlayabilirsiniz. Böylece, kodunuzun günlük ifadeleriyle dolmasını önleyebilirsiniz.

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. Söz konusu kod satırındaki sol oluğu tıklayın veya düzeltme işaretini satıra yerleştirin ve Ctrl+F8 (macOS'te, Command+F8) tuşlarına basın.
  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 .

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

Şekil 5. Bir ayrılma 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 belirlemek için Debugger sekmesindeki araçları kullanın:

  • Bir değişkene ilişkin nesne ağacını incelemek için 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şaretli olduğundan emin olun.

  • Herhangi bir yöntem girmeden kodda sonraki satıra ilerlemek için Geçişi tıklayın.

  • Bir yöntem çağrısının ilk satırına ilerlemek için Adıma Adım ekle'yi tıklayın.

  • Mevcut yöntemin dışındaki sonraki satıra ilerlemek için Çıkış tıklayın.

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

Projeniz yerel kod kullanıyorsa "Otomatik olarak hata ayıkla" türü varsayılan olarak hem Java hata ayıklayıcısını 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 kesme noktalarını algılayabilmesi için Otomatik Olarak Algıla, Yerel veya Çift 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 kullanmayla ilgili bölümü okuyun.

Android Studio, uygulamanızı hedef cihazınıza dağıttığında, Ş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 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 ve Java kodunda hata ayıklarken olduğu gibi çalışır.

    İş parçacıkları 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 bölümlerinde bu bölmeler hakkında daha fazla bilgi edinebilirsiniz.

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

  2. Java hata ayıklayıcısı, 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 LLDB'ye komut satırı seçeneklerini iletmek için LLDB oturum görünümündeki LLDB terminalini kullanabilirsiniz. Hata ayıklayıcının uygulama işleminize eklenmesinden hemen önce veya hemen sonra, uygulamanızda hata ayıklama işlemine her başladığınızda 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şim kurduğunda uygulama sürecinizi askıya alabilecek, izleme noktaları adı verilen özel ayrılma noktası türleri de ayarlayabilirsiniz. Daha fazla bilgi edinmek için izleme noktası ekleme konulu 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. Kesme noktaları penceresi Şekil 7'de gösterildiği gibi 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, her bir ayrılma noktasını bölmedeki listeden etkinleştirebilmenizi veya devre dışı bırakabilmenizi sağlar. Bir ayrılma 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 ayrılma noktası seçin. Başlangıçta devre dışı bırakılacak bir kesme noktası yapılandırabilir ve farklı bir kesme noktası isabetinden sonra sistemin bu kesme noktasını etkinleştirmesini sağlayabilirsiniz. Bir ayrılma noktası isabet edildikten 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 kesme 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 Kesme noktalarını yoksay simgesini tıklayın. Yeniden etkinleştirmek için tekrar tıklayın.

Pencere çerçevelerinde hata ayıklama

Debugger penceresindeki Çerçeveler bölmesi, geçerli kesme noktasının isabet görmesine neden olan yığın çerçevesini incelemenize olanak tanır. Böylece, Android uygulamanızdaki yığın çerçevesinde gezinip bunları inceleyebilir, ayrıca iş parçacıklarının listesini inceleyebilirsiniz.

Bir iş parçacığını 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 iş parçacığı sunumunu özelleştirebilir ve Çerçeveleri İnceleme kılavuzunda açıklandığı gibi yığın çerçevesini dışa aktarabilirsiniz.

Değişkenleri inceleme

Debugger penceresindeki Değişkenler bölmesi, sistem bir kesme noktasında uygulamanızı 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, seçilen çerçevede bulunan statik yöntemler ve/veya değişkenler kullanarak anlık ifadeleri değerlendirmenize de olanak tanır.

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

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

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

İzlenen ifadeler, kesme noktalarına ulaşıldığında veya kodunuzda ilerlemeniz durumunda güncellenir.

Siz başka bir ifadeyi manuel olarak değerlendirene veya kodunuzda adım adım ilerlenceye kadar değerlendirilen ifadeler 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.

İzleme noktaları ekleyin

C/C++ kodunda hata ayıklarken, uygulamanız belirli bir bellek bloğuyla etkileşim kurduğunda uygulama sürecinizi askıya alabilecek, izleme noktaları adı verilen özel kesme noktası türleri ayarlayabilirsiniz. Örneğin, bir bellek bloğuna iki işaretçi ayarlayıp ona bir izleme noktası atarsanız bu bellek bloğuna erişmek için iki işaretçiden birini kullanmak izleme noktasını tetikler.

Android Studio'da, belirli bir değişken 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 bu değişkene ayırdığı bellek bloğuna atar. Bu işlem, Saatler bölmesine değişkenin eklenmesinden farklıdır. Bu özellik, değişkenin değerini gözlemlemenizi sağlar ancak sistem, değişkenin bellek değerini okuduğunda veya değiştirdiğinde uygulama işleminizi askıya almanıza izin vermez.

Not: Uygulama işleminiz bir işlevden çıktığında ve sistem, yerel değişkenleri bellekten ayı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 şartları karşılamanız gerekir:

  • Hedef fiziksel cihazınız veya emülatörünüz x86 veya x86_64 CPU kullanıyor. Cihazınız ARM CPU kullanıyorsa bellekteki değişkeninizin adresinin sınırını 32 bit işlemciler için 4 bayt, 64 bit işlemciler için 8 bayt olarak hizalamanız gerekir. Yerel kodunuzdaki bir değişkeni uyumlu hale getirmek için değişken yavaşlamasında aşağıda gösterildiği gibi __attribute__((aligned(num_bytes))) değerini belirtin:
    // For a 64-bit ARM processor
    int my_counter __attribute__((aligned(8)));
    
  • Zaten üç 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ızda 32 bit ARM ABI'leri ile hata ayıklarken izleme noktası eklemek veya değişkenlerin değerlerini incelemek için kod içindeki değişkenlerin üzerine fareyle gelmek kilitlenmeye neden olabilir. Geçici bir çözüm olarak 64 bit ARM, x86 veya x86_64 ikili programları kullanarak hata ayıklama yapın. Bu sorun, yakında yayınlanacak bir Android Studio sürümünde düzeltilecektir.

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

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

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

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

    • Etkin: Android Studio'nun, ayarı değiştirene kadar izleme noktasını yoksaymasını 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, izleme noktasına atadığınız bellek bloğuna eriştiğinde uygulama işleminizi varsayılan olarak askıya alır. Böyle bir davranış istemiyorsanız bu seçeneğin işaretini kaldırın. Bu şekilde, sistem izleme noktanızla etkileşimde bulunduğunda davranışı özelleştirmek için kullanabileceğiniz ek seçenekler ortaya çıkar: Mesajı konsola 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 işlemi yapmaya çalıştığında, izleme noktanızı tetiklemesi gerekip gerekmediğini seçin. İzleme noktanızı okuma veya yazma sırasında tetiklemek için Tümü'nü seçin.
  4. Done'ı (Bitti) 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 Kesme 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 kutusu, mevcut izleme noktalarınızı listeler ve her biriyle ilgili davranış ayarlarını içerir.

İ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 bir izleme noktası ayarladığınız bellek bloğuna 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 çalıştırdığı 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ı tetiklemeden hemen önce çalıştırdığı kod satırını belirtir.

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ı görüntüleme biçimi seçebilirsiniz. Değişkenler sekmesi görüntülenip bir kare seçiliyken aşağıdakileri yapın:

  1. Değişkenler listesinde, kaynak satırında herhangi bir yeri sağ tıklayarak listeyi görüntüleyin.
  2. Listede, Görüntüleme şekli'ni ve kullanmak istediğiniz biçimi seçin.

    Kullanabileceğiniz biçimler, seçtiğiniz kaynağın veri türüne bağlıdır. Aşağıdaki seçeneklerden bir 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çimi.
    • Nesne: Nesne (bir sınıfın örneği) tanımını görüntüleyin.
    • Dizi: Dizi biçiminde görüntüler.
    • 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ır ve bir kullanarak ikili değeri gösterir.
    • measureSpec: Üst öğeden seçilen alt öğeye geçirilen değer. İlgili konu: MeasureSpec.
    • Onaltılık:Onaltılık değer olarak gösterilir.
    • Temel: Basit bir veri türü kullanan 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 şekilde 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.