Projenizdeki hataları ayıklama

Yerel kilitlenmelerde hata ayıklama

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

Yaygın kilitlenme türleri ve bunların nasıl inceleneceği ile ilgili daha kapsamlı bir katalog için Yerel Kilitlenmeleri Teşhis Etme bölümüne bakın.

ndk-stack aracı, kilitlenmelerinizi sembolize etmenize yardımcı olabilir. Android Studio'daki kilitlenmelerde hata ayıklama işlemi, Uygulamanızda hata ayıklama ile ilgili genel dokümanlarda açıklandığı şekilde hata ayıklama işlemi gerçekleştirebilirsiniz. Komut satırını kullanmayı tercih ederseniz ndk-gdb, kabuğunuzdan gdb veya lldb öğelerini eklemenize olanak tanır.

Uygulamaların, mezar taşı izlerine doğrudan erişmesini sağlayın

Android 12'den (API düzeyi 31) itibaren uygulamanızın yerel kilitlenme hedefine protokol arabelleği olarak ApplicationExitInfo.getTraceInputStream() yöntemiyle erişebilirsiniz. Protokol arabelleği, bu şema kullanılarak serileştirilir. Daha önce, bu bilgilere erişmenin tek yolu Android Debug Bridge (adb) üzerinden veriliyordu.

Aşağıda, bunu uygulamanıza nasıl uygulayacağı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ında hata ayıklama

Adres Temizleyici (HWASan/ASan)

HWAddress Sanitizer (HWASan) ve Address Sanitizer (ASan), Valgrind'e benzer ancak Android'de önemli ölçüde daha hızlıdır ve çok daha iyi desteklenir.

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

Malloc hata ayıklaması

C kitaplığının yerel bellek sorunlarını ayıklamaya yönelik yerleşik seçeneklerinin kapsamlı açıklaması için Malloc Hata Ayıklama ve libc Geri Çağırmalarını Kullanarak Yerel Bellek İzleme bölümlerine bakın.

Malloc kancaları

Kendi araçlarınızı oluşturmak istiyorsanız Android'in libc aracı, program yürütme sırasında gerçekleşen tüm ayırma/ücretsiz çağrılara müdahale etmeyi de destekler. Kullanım talimatları için malloc_hooks dokümanlarına bakın.

Malloc istatistikleri

Android, <malloc.h> için mallinfo(3) ve malloc_info(3) uzantılarını destekler.

malloc_info işlevi, Android 6.0 (Marshmallow) ve sonraki sürümlerde kullanılabilir. Bunun XML şeması, Bionic'in malloc.h başlığında açıklanmıştır.

Profil oluşturma

Yerel kodun CPU profili oluşturmak için Simpleperf öğesini kullanabilirsiniz.