Déboguer votre projet

Déboguer les plantages natifs

Si vous avez du mal à comprendre un fichier de crash dump ou un tombstone de plantage natif, le débogage du code natif de la plate-forme Android est une bonne introduction.

Pour obtenir un catalogue plus complet des types de plantages courants et déterminer comment les analyser, consultez la section Diagnostiquer les plantages natifs.

L'outil ndk-stack peut vous aider à symboliser les plantages. Vous pouvez déboguer des plantages dans Android Studio, comme décrit dans la documentation générale sur le débogage de votre application. Si vous préférez utiliser la ligne de commande, ndk-gdb vous permet d'associer gdb ou lldb à partir de votre interface système.

Fournir aux applications un accès direct aux traces de tombstone

À partir d'Android 12 (niveau d'API 31), vous pouvez accéder au tombstone de plantage natif de votre application en tant que tampon de protocole via la méthode ApplicationExitInfo.getTraceInputStream(). Le tampon de protocole est sérialisé à l'aide de ce schéma. Auparavant, le seul moyen d'accéder à ces informations était d'utiliser Android Debug Bridge (Adb).

Voici un exemple de mise en œuvre dans votre application :

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);
    }
}

Déboguer les problèmes de mémoire native

Address Sanitizer (HWASan/ASan)

HWAddress Sanitizer (HWASan) et Address Sanitizer (ASan) sont semblables à Valgrind, mais sont beaucoup plus rapides et fonctionnent bien mieux avec Android.

Il s'agit de l'option la plus adaptée pour déboguer les erreurs de mémoire sur Android.

Débogage malloc

Pour obtenir une description détaillée des options intégrées de débogage de la bibliothèque C afin de déboguer les problèmes de mémoire native, reportez-vous aux sections Débogage malloc et Suivi de la mémoire native à l'aide de rappels libc.

Hooks malloc

Si vous souhaitez créer vos propres outils, la bibliothèque libc d'Android permet également d'intercepter tous les appels d'allocation et sans frais qui ont lieu pendant l'exécution du programme. Pour en savoir plus, consultez la documentation concernant malloc_hooks.

Statistiques malloc

Android accepte les extensions mallinfo(3) et malloc_info(3) dans <malloc.h>.

La fonctionnalité malloc_info est disponible dans Android 6.0 (Marshmallow) et les versions ultérieures, et son schéma XML est documenté dans l'en-tête malloc.h de Bionic.

Profilage

Pour profiler le processeur du code natif, vous pouvez utiliser Simpleperf.