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.