39 votes

Comment obtenir ndk-gdb de travail sur Android?

Je vais essayer d'obtenir le NDK débogueur de travail, mais sans succès jusqu'à présent.

Pour s'assurer que mon symboles de débogage sont présents et valides, j'utilise les options du compilateur -O0 et g, et le ndk-build paramètre NDK_DEBUG=1.

Le ndk-gdb script s'exécute avec les enjeux et lance GDB. Quand faire un "sharedlibrary de la commande", j'obtiens ceci:

Symbols already loaded for /bla/bla/libMySharedLib.so

Cependant, lorsque j'essaie de rupture de l'exécution ou, par exemple, l'ajout d'une erreur de segmentation à tester, je n'ai jamais obtenir l'un des symboles de la bibliothèque dans la pile d'appel. Les symboles que j'ai obtenu sont de la libc, si je casse l'exécution alors qu'il est en attente d'un mutex par exemple. Également essayé d'ajouter des points d'arrêt avec pas de chance. GDB me permet d'ajouter des points d'arrêt, et le code s'exécute bien, mais les points d'arrêt ne sont jamais déclenché.

Je suis l'aide de l'API de niveau 8 que j'ai besoin de soutien Android 2.2 (Froyo).

Ce que je fais mal?

Merci pour votre temps.

72voto

Mārtiņš Možeiko Points 8444

Vous n'avez pas besoin d'utiliser -O0 g commutateurs. Vous devez effectuer l'une des opérations suivantes:

  1. mettre android:debuggable="true" de la <application> tag AndroidManifest.xml le fichier
  2. utiliser NDK_DEBUG=1 après ndk-build
  3. mettre APP_OPTIM := debug en Application.mk fichier

Faire tout le monde de ces trois choses utilisera automatiquement -O0 et -g commutateurs.

Pouvez-vous essayer de lancer gdb manuellement, sans gdb script? Elle implique les étapes suivantes:

  1. poussant gdbserver fichier /data/local le dossier sur le périphérique
  2. l'exécution de votre application et de l'invocation en adb shell commande suivante gdbserver :5055 --attach PID, où PID est votre application id de processus.
  3. l'exécution adb forward tcp:5055 tcp:5055 sur l'hôte
  4. l'exécution arm-linux-androideabi-gdb.exe de votre dossier app
  5. entrant les commandes suivantes dans gdb
  6. set solib-search-path obj/local/armeabi
  7. file obj/local/armeabi/libMySharedLib.so
  8. target remote :5055

Et voir si vous pouvez déboguer ensuite.

Si vous souhaitez voir des symboles pour les autres bibliothèques partagées de votre bibliothèque utilise comme libc.so, puis de les tirer de l'appareil (à partir de /system/lib le dossier) de votre obj/local/armeabi le dossier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X