Comment puis-je déboguer efficacement le code C encapsulé avec JNI dans Eclipse? (Dev Android)

J’ai un segfault mais je ne sais absolument pas comment le localiser.

Conseils? entrez la description de l'image ici

Vous pouvez obtenir l’emplacement de la fonction C qui a provoqué l’ incident à l’aide de l’ parsingur Android NDK Stacktrace .

Les étapes sont sur le wiki , mais en gros, vous devez obtenir la trace de stack de logcat dans un fichier ( adb logcat > mycrash.log ), puis vider votre bibliothèque dans un fichier texte, puis exécuter le programme sur les deux. Voici le script shell que j’utilise pour faire le lot:

 #!/bin/sh if test $# -lt 2 ; then echo "Extract readable stack trace from Android logcat crash" echo "Usage $0 lib.so crash.log" exit 1 fi of=$(mktemp) echo "Disassemble $1" ~/tools/android-ndk-r5/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-objdump -S $1 > $of echo "Parse stack trace in $2" ~/bin/parse_stack.py $of $2 

Modifiez les chemins d’access au fichier NDK Android et au fichier parse_stack.py selon vos besoins.

Comment déboguer efficacement le code Android JNI C / C ++ dans Eclipse:

  1. Configurez votre projet pour qu’il soit un projet mixte Java, C et C ++:

    http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-development/

  2. Configurez votre projet pour activer le débogage:

    http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-debugging/#more-23

Note: L’auteur du site utilisait Eclipse (Galileo) sur Ubuntu. J’ai trouvé des différences lors de l’utilisation d’Eclipse (Helios) sur MacOS (en particulier avec la configuration de débogage). Une fois que tout est configuré, Eclipse fonctionne très bien comme un IDE pour le développement JNI.