Projenizdeki hataları ayıklama

Yerel kilitlenmelerde hata ayıklama

Yerel bir kilitlenme dökümünü veya mezar taşını anlamakta zorlanıyorsanız Yerel Android Platform Kodunda Hata Ayıklama iyi bir giriştir.

Sık karşılaşılan kilitlenme türleri ve bunların nasıl inceleneceği ile ilgili daha kapsamlı bir katalog için Yerel Kilitlenmeleri Teşhis Etme.

ndk-Stack aracı, kilitlenmelerinizi simgeselleştirmeye yardımcı olabilir. Android Studio'da kilitlenmelerle ilgili hataları genel hatlarıyla açıklandığı şekilde Uygulama hatalarını ayıkla belgeleri. Örneğin komut satırı, ndk-gdb, gdb veya Kabuktan lldb.

Uygulamaların mezar kalıntılarına doğrudan erişmesine izin ver

Android 12'den (API düzeyi 31) itibaren uygulamanızın yerel kilitlenmesine erişebilirsiniz tombstone olarak protokol arabelleğine ApplicationExitInfo.getTraceInputStream() yöntemidir. Protokol arabelleği, bu şema kullanılarak serileştirilir. Daha önce bu bilgilere ulaşmanın tek yolu Android Debug Bridge (adb).

Aşağıda, bunu uygulamanızda nasıl kullanacağınıza ilişkin bir örnek verilmiştir:

ActivityManager activityManager: ActivityManager = getSystemService(Context.ACTIVITY_SERVICE);
MutableList<ApplicationExitInfo> exitReasons = activityManager.getHistoricalProcessExitReasons(/* packageName = */ null, /* pid = */ 0, /* maxNum = */ 5);
for (ApplicationExitInfo aei: exitReasons) {
    if (aei.getReason() == REASON_CRASH_NATIVE) {
        // Get the tombstone input stream.
        InputStream trace = aei.getTraceInputStream();
        // The tombstone parser built with protoc uses the tombstone schema, then parses the trace.
        Tombstone tombstone = Tombstone.parseFrom(trace);
    }
}

Yerel bellek sorunlarını ayıklama

Adres Dezenfektanı (HWASan/ASan)

HWAddress Sanitizer (HWASan) ve Adres Temizleyici (ASan), Valgrind'e benzer ancak Android'de çok daha hızlı ve çok daha iyi destekleniyor.

Bunlar, Android'de bellek hatalarını ayıklamak için en iyi seçeneğinizdir.

Malloc hata ayıklaması

Görüntüleyin Malloc Hata Ayıklaması ve libc Geri Çağırmaları ile Yerel Bellek İzleme C kitaplığının yerleşik hata ayıklama seçeneklerinin ayrıntılı açıklaması için yerel bellek sorunları.

Malloc kancaları

Kendi araçlarınızı geliştirmek istiyorsanız Android'in libc'si müdahaleleri de destekler Program yürütülürken gerçekleşen tüm tahsise/ücretsiz aramalara izin verilir. Bkz. malloc_hooks belgeleri bakın.

Malloc istatistikleri

Android, alışveriş merkezi(3) ve malloc_info(3) uzantılar <malloc.h>.

malloc_info işlevi, Android 6.0 (Marshmallow) ve daha yüksek olduğunu ve XML şemasının Bionic’in malloc.h kullanabilirsiniz.

Profil oluşturma

Yerel kodun CPU profilini oluşturmak için Simpleperf kullanabilirsiniz.