J'ai configuré le débogage dans Eclipse pour le code natif utilisant le NDK Android (sur Windows XP, avec Cygwin) jusqu'au stade où je peux définir des points d'arrêt à la fois dans le code Java et dans le code natif et le débogueur s'y arrête correctement. Le problème est que, lorsque j'avance dans le code natif, j'obtiens souvent des défauts de segmentation/SIGILL qui ne se produisent pas lorsque je continue au-delà du point d'arrêt.
- Mon application est débuggeable comme défini dans AndroidManifest.xml
- J'ai modifié le fichier (NDK)/build/core/build-binary.mk afin d'éviter qu'il ne supprime les symboles de débogage lorsque
APP_OPTIM
est défini comme debug, ce qu'il est dans le fichier Application.mk dans mon répertoire jni - J'ai défini
LOCAL_CFLAGS := -g -O0
dans le fichier Android.mk, et j'ai également essayé chacun de ces drapeaux individuellement
J'ai lu que ce problème était lié au code optimisé généré, mais désactiver l'optimisation à l'aide de la commande -O0
n'a aucun impact sur mon problème. J'ai également rencontré l'utilisation de l'option NDK_BUILD=1
lors de la construction, mais en définissant debuggable=true
dans AndroidManifest.xml a apparemment le même effet.
J'ai essayé cela à la fois sur un émulateur (fonctionnant en 2.3.3) et sur un appareil (fonctionnant en 2.2 - qui, étonnamment, n'a pas eu les problèmes de threads auxquels je m'attendais), avec des résultats similaires (bien que, si je me souviens bien, les échecs se sont produits à différents points du code).
Est-ce que quelqu'un a une idée des corrections/étapes possibles que je pourrais essayer, et/ou a été capable de passer avec succès le code natif sans problème ?
Merci beaucoup.
Edit : Ce problème n'a jamais été vraiment résolu, mais pour ceux qui veulent jeter un coup d'œil à mon guide de débogage du NDK, vous pouvez le trouver à l'adresse suivante ici .
Edit 2 : Les réponses que j'ai obtenues à cette question sont arrivées après la sortie de nouvelles versions du NDK, et cette question peut maintenant être redondante. Mon guide peut encore fonctionner, mais je n'ai pas utilisé le NDK depuis un certain temps et je ne peux donc pas me porter garant de son exactitude. J'ai accepté la réponse que j'ai, car les trois disent essentiellement la même chose, et c'était la première à être soumise.