2010-09-09 12 views
7

J'ai découvert l'outil de débogage de "ndk-gdb" d'Android NDK r4. Maintenant, je peux commencer à déboguer l'échantillon hello-jni (bien qu'un problème existe). Mais, pour mes propres applications Android, j'ai plusieurs bibliothèques à utiliser, construites à partir d'un grand nombre de fichiers c/c + +. J'avais l'habitude de construire ces fichiers avec ndk-build, puis de copier ces fichiers dans le répertoire $ PROJECT/libs, et ça marche bien sans débogage. Mais maintenant je veux déboguer un si lib avec ndk-gdb. Quand j'ai démarré ndk-gdb, il se plaint qu'aucune table de symboles n'est chargée.ndk-gdb avec plusieurs libs

Je copie également tous ces fichiers dans $ PROJECT/bin/ndk/local/armeabi (semble être le répertoire par défaut où gdb essaie de charger la table des symboles). Et encore, ça ne marche pas.

Peut-être que ndk-gdb ne peut pas suivre mes fichiers après les avoir copiés? Ou pourquoi ne peut-il charger aucune table de symboles, même après les avoir copiées sous $ PROJECT/bin/ndk/local/armeabi?

Avez-vous déjà rencontré ce problème?

Merci beaucoup!

Répondre

10

Je pense que vous les copiez dans le mauvais dossier. L'ancien NDK a copié les fichiers dans le dossier bin; le nouveau les copie dans le dossier obj, et c'est là qu'il pointe gdb pour chercher des symboles. De même, assurez-vous de copier les fichiers .so pré-stripped dans le dossier obj, et non les mêmes fichiers que vous copiez dans le dossier libs: Dans le cadre du processus de génération, les fichiers du dossier libs ont été copiés. été dépouillé de symboles et d'informations de débogage. Vous devez donc conserver deux copies de chacun de vos fichiers .so: l'une du dossier libs à installer sur le périphérique Android et l'autre du dossier obj à installer pour GDB afin d'obtenir des symboles.

Vous pouvez, au lieu de copier les fichiers de débogage dans le dossier obj dans l'arborescence de votre application, ajouter l'autre répertoire de construction obj/folders au chemin de recherche de symboles de gdb. ndk-build met en place un fichier, gdb.setup, qui inclut une ligne commençant par set solib-search-path. Vous pouvez placer un chemin séparé par un signe deux-points sur cette ligne qui inclut tous vos dossiers obj/local/quelquechose, et gdb trouvera les symboles.

+0

Merci beaucoup pour votre réponse! Je vais essayer votre solution demain. Et, pourriez-vous offrir plus de documents sur le processus de construction interne de NDK? Quelque chose comme "dépouillé", je n'en ai jamais entendu parler. – MaratSafinWang

+1

Voir la commande Unix "strip": http://unixhelp.ed.ac.uk/CGI/man-cgi?strip - faites attention si vous tapez "man strip" dans Google au travail. A été surpris par les premiers liens. :) – SomeCallMeTim

+0

Comme pour les autres étapes du processus de construction, ceci est documenté dans docs/OVERVIEW.TXT dans le paquetage NDK: "La dernière étape copiera, en cas de succès, les bibliothèques partagées que votre application a besoin du projet racine de votre application annuaire." – SomeCallMeTim

Questions connexes