J'essaie de faire fonctionner le débogueur NDK mais sans succès jusqu'à présent.
Pour m'assurer que mes symboles de débogage sont présents et valides, j'utilise les options du compilateur -O0 et -g, et le paramètre ndk-build NDK_DEBUG = 1.
Le script ndk-gdb s'exécute sans problème et lance GDB. Quand je fais une commande "sharedlibrary", j'obtiens ceci:
Symbols already loaded for /bla/bla/libMySharedLib.so
Cependant, lorsque j'essaie de casser l'exécution ou par exemple en ajoutant un segfault à tester, je n'obtiens aucun des symboles de cette bibliothèque dans la pile des appels. Les seuls symboles que j'ai obtenus proviennent de libc, si je romps l'exécution en attendant un mutex par exemple. A également essayé d'ajouter des points d'arrêt sans succès. GDB me permet d'ajouter les points d'arrêt et le code fonctionne correctement, mais les points d'arrêt ne sont jamais déclenchés.
J'utilise l'API niveau 8 car j'ai besoin de prendre en charge Android 2.2 (Froyo).
Vous n'avez pas besoin d'utiliser les commutateurs -O0 ou -g. Vous devez effectuer l'une des opérations suivantes:
Android:debuggable="true"
à la <application>
faire AndroidManifest.xml
fichierNDK_DEBUG=1
après ndk-buildAPP_OPTIM := debug
dans le fichier Application.mkFaire n'importe laquelle de ces trois choses utilisera automatiquement les commutateurs -O0 et -g.
Pouvez-vous essayer d'exécuter gdb manuellement, sans script gdb? Cela implique les étapes suivantes:
gdbserver
vers /data/local
dossier sur l'appareiladb Shell
commande suivante gdbserver :5055 --attach PID
, où PID est l'ID de votre processus de demande.adb forward tcp:5055 tcp:5055
sur l'hôtearm-linux-androideabi-gdb.exe
depuis le dossier de votre applicationset solib-search-path obj/local/armeabi
file obj/local/armeabi/libMySharedLib.so
target remote :5055
Et voyez si vous pouvez déboguer alors.
Si vous voulez voir les symboles des autres bibliothèques partagées que votre bibliothèque utilise comme libc.so
, puis retirez-les de l'appareil (de /system/lib
dossier) dans votre obj/local/armeabi
dossier.