L'exécution de ndk-gdb avec package ne trouve pas d'erreur sur le téléphone motorola
J'ai un C++ d'une application Android que je suis en train de déboguer avec ndk-gdb. L'application utilise plusieurs threads, mais les soi-disant r5 de la ndk prend en charge plusieurs threads. Aussi, je ne suis même pas arrivé à un point où gdb démarre. Je lance la commande:
ndk-gdb --start --force --verbose
Il trouve alors le chemin d'accès correct pour le ndk et kit de développement logiciel (ou au moins de la bad), et le besoin de ABIs et autres joyeusetés.
$ ndk-gdb --start --force --verbose
Android NDK installation path: /home/leif/eclipse/android-ndk-r5b
Using default adb command: /home/leif/eclipse/android-sdk-linux_86/platform-tools/adb
ADB version found: Android Debug Bridge version 1.0.26
Using final ADB command: '/home/leif/eclipse/android-sdk-linux_86/platform-tools/adb'
Using auto-detected project path: .
Found package name: net.leifandersen.mobile.android.marblemachine
ABIs targetted by application: armeabi
Device API Level: 10
Device CPU ABIs: armeabi-v7a armeabi
Compatible device ABI: armeabi
Il cherche alors gdb serveur, et le trouve, y compris la bonne PID, suivi par le démarrage de l'activité.
Mais ensuite, il me dit que le colis ne peut être trouvé:
Setup network redirection
## COMMAND: /home/leif/eclipse/android-sdk-linux_86/platform-tools/adb shell run-as <package name> lib/gdbserver +debug-socket --attach 16040
## COMMAND: /home/leif/eclipse/android-sdk-linux_86/platform-tools/adb forward tcp:5039 localfilesystem:run-as: Package '<package name>' is unknown/debug-socket
Puis il crache ce que vous pourriez obtenir si vous avez mal utiliser adb (le fichier d'aide), suivie par:
ERROR: Could not setup network redirection to gdbserver?
Maybe using --port=<port> to use a different TCP port might help?
run-as: Package '<package name>' is unknown
J'ai regardé dans /data/system/packages.liste, et oui, mon apk est très certainement là-bas, et l'emplacement de l'indiquer, c'est correct sur le système de fichiers. Ce n'est donc pas le problème.
Ce tutoriel: http://vilimpoc.org/blog/2010/09/23/hello-gdbserver-a-debuggable-jni-example-for-android/ recommande de supprimer et de réinstaller, ainsi que le nettoyage de votre eclipse construire.
Je n'ai pas utiliser eclipse pour construire le paquet, mais je n'ai nettoyer tout et compiler à partir de zéro, supprimé et réinstallé à pas de chance.
Quelqu'un a eu des problèmes similaires, et comment les avez-vous résolues? Merci.
Edit: Oh, et j'ai essayé un autre port en vain, il ne semble pas être quelque chose sur 5039 (le port par défaut) de toute façon. Et autant que je sache, je n'ai pas de pare-feu bloquant la connexion. Je suis en développement sur Ubuntu 11.04.
Edit2: Hmm...ça ressemble à la nouvelle ndk (r5c), le message d'erreur a changé:
ERROR: Could not extract package's data directory. Are you sure that
your installed application is debuggable?
Et oui, debuggable est définie sur true dans le manifeste, et tout le code natif est construit avec:
LOCAL_CFLAGS := -Wall -g
LOCAL_LDFLAGS := -Wl,-Map,xxx.map
Nope, j'obtiens: exécution: Package net.leifandersen.mobile.android.marblemachine " est inconnue, aussi, il semble qu'il y est un rapport de bug pour ce genre de chose, mais le paquet n'est pas trois niveaux de profondeur: code.google.com/p/android/issues/detail?id=13965. Aussi, comme je l'ai dit, le paquet est toujours répertorié dans /data/system/packages.liste.
OriginalL'auteur Leif Andersen | 2011-05-28
Vous devez vous connecter pour publier un commentaire.
Donc, malheureusement, votre appareil ne peut pas être utilisé avec le ndk-gdb, en raison de l'exécution que ne fonctionne pas. Si vous souhaitez utiliser ce périphérique, vous devez avoir les privilèges de root.
ÉDITÉ:
Modifier ndk-gdb script pour se débarrasser de la dépendance de l'exécution que. Il ne fonctionne que sur les privilèges de root ('adb shell whoami' doit être 'root').
Ok, j'ai mis à jour ma réponse pour les privilèges de root.
Cela a fonctionné parfaitement, merci.
(Enfin, pas sur r5c, mais r5b fonctionne bien, et j'imagine qu'une semblable edit travail pour r5c).
exécution comme c'est apparemment complètement cassé sur 4.3: code.google.com/p/android/issues/detail?id=58373 . Le " FutureRelease statut signifie que la prochaine version d'Android devrait le résoudre, sans doute la prochaine 4.4.
OriginalL'auteur Kazuki Sakamoto
Il y a un bug avec run-as, ce sera un échec si vous avez un trop grand nombre d'applications installées. J'ai été en mesure de contourner ce problème en supprimant certaines apps de mon Evo 4G. J'ai trouvé ça dans le NDK des groupes de discussion - http://groups.google.com/group/android-ndk/browse_thread/thread/ae9e8d5fe2716ae6?pli=1
OriginalL'auteur Brad
J'ai eu le même problème aujourd'hui avec le Samsung Galaxy S running rom MIUI. ndk-gdb toujours indiqué "ne Pouvait pas extraire du paquet de données d'annuaire. Êtes-vous sûr que votre application est debuggable?"
Il s'est avéré que la raison en est que tant que pas de travail en raison de /data/data lien symbolique. Cyanogen est utilisé dans la mesure ROM. Suppression du lien symbolique et déplacer tous les fichiers de /datadata dans /data/data résolu le problème.
Cyanogène 2.3 correctif:
ndk-gdb repose sur le "run-comme de "commande", qui lui-même fait un certain nombre de vérifications sur les données /répertoire de données. Dans Cyanogen 2.3, c'est un lien symbolique, et comme échoue avec un message cryptique, et ndk-gdb ne parvient pas à revenir avec [2]:
Un travail autour de est de recréer /data/données avec lien symbolique :
http://en.wikibooks.org/wiki/OpenGL_Programming/Installation/Android_NDK
http://forum.cyanogenmod.com/topic/27657-run-as-not-working-due-to-datadata-symlink/
Espère que cela aide d'autres avec le même problème. Vérifiez pour voir si l'exécution en tant que fonctionne comme prévu ou pas. Ce n'est pas parce que le binaire n'est pas debuggable. ndk-gdb message d'erreur est très trompeur.
OriginalL'auteur wilson
A eu un problème similaire et en cours d'exécution:
de sortie:
correctif a été de désinstaller sur l'appareil, puis de la réinstaller à partir de la ligne de commande via:
OriginalL'auteur Justin Buser
J'ai aussi rencontré ce problème et a découvert qu'il peut être causé par un court-paquet de noms!
Lors du test sur Android 2.2 système avec une application qui avait un paquet avec 3 niveaux de (e.g: un.b.c) ndk-gdb ne fonctionnerait pas. Changer le package avoir 4 ou plus de niveaux (par exemple, un.b.c.d) ou en cours d'exécution sur Android 2.3 ou version ultérieure résolu le problème.
voir http://code.google.com/p/android/issues/detail?id=13965 pour plus d'informations.
OriginalL'auteur Chris Noldus
Il existe encore une autre possibilité pour ce problème de se produire: si vous avez déjà installé votre application comme une application système (dans /system/app), désinstallé puis installé une fois de plus comme une application normale. Dans ce cas, il est possible qu'il existe encore des fichiers restants que votre application n'a pas accès parce qu'il n'a pas d'autorisations.
Je l'ai résolu en désinstallant mon application et retirer manuellement chaque pièce de l'information relative à celle-ci (avec la commande adb shell et les privilèges de root). Autant que je sache, qui comprend:
Après l'installation de nouveau, j'ai été en mesure de déboguer l'application à nouveau.
OriginalL'auteur Rubms
Au cas où quelqu'un est à l'aide de Samsung Galaxy S4/... et a obtenu 4.4.2 (dernière rom stock - en maintenant à tous les pays) - vous avez vissé! Samsung bug. Donc, racine, comme expliqué dans l'une des réponses ci-dessus, ou d'obtenir un autre appareil...
Une autre solution est de revenir à Android 4.2.2 (pas 4.4.2) - pré 4.3 version qui a commencé cette question.
OriginalL'auteur rubmz