3 votes

Attacher GDB à Eclipse pour déboguer du code C++ JNI

J'ai des problèmes pour déboguer une application JNI. J'ai lu plusieurs fils de discussion dans StackOverflow, par exemple celui-ci , celui-ci o celui-ci . J'ai également essayé de lancer gdb dans un shell séparé et de l'attacher au processus java en cours. Dans les deux cas, le problème est le même : GDB ne trouve pas les sources à déboguer. Ce que j'ai essayé

  • Ajouter la ligne "dir" à gdbinit, pointant vers le dossier des sources C++.
  • Ajout du dossier des sources C++ à la configuration du débogage GDB dans Eclipse, dans l'onglet "Sources".
  • Ajout de l'environnement set LD_LIBRARY_PATH=/path/to/library.so, étant library.so le fichier de bibliothèque construit à partir des fichiers sources C++.
  • J'attache ddd au processus java, mais j'obtiens alors une erreur parce que pthread_join.c n'est pas trouvé dans le répertoire de travail. Je n'ai pas ce fichier sur mon disque dur. Je ne sais pas de quoi il s'agit.

Rien n'a fonctionné. J'ai passé plusieurs jours sur ce sujet. Je sais que mon problème se situe dans le code C++ appelé par le wrapper JNI, mais je n'arrive pas à le déboguer. Des pistes ? Si cela peut vous aider, j'utilise Eclipse Juno dans Debian 7 sous une VM Parallels sur Mac OS.

Merci d'avance,

2voto

Eugene Points 4854

Vous devez disposer d'informations de débogage dans votre bibliothèque native. Vous devez passer -g à votre compilateur et à votre éditeur de liens pour avoir ces informations dans l'exécutable. Vous pouvez également ajouter -O0 .

2voto

Tom Blodget Points 6626

Comme alternative à l'attachement au processus Java, vous pouvez créer une application C++ et la déboguer directement. Il vous suffit de lier les fonctions que vous voulez tester. Dans la fonction principale, créer la VM , enregistrer les fonctions avec RegisterNatives et lancer une classe de test Java qui les utilise.

Avec un peu de chance, le débogueur n'aura aucun problème à trouver les sources puisque cela fait partie de la boucle normale de compilation/liaison/débogage d'une application C++.

0voto

Alex Cohn Points 13248

Je vous suggère de commencer par la dernière Paquet ADT . Vous pouvez même télécharger la version Mac Vous n'aurez donc même pas besoin de Parallels (voir une version détaillée de l'outil instructions ). Ensuite, on choisit Déboguer une application native Android dans le menu de lancement.

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