Je porte du code C ++ sur Android en utilisant NDK et GCC. Le code fonctionne essentiellement. À un moment donné, lors du débogage dans Eclipse, l'appel
Dabbler::Android::Factory* pFactory = new Dabbler::Android::Factory;
provoque cette erreur:
Thread [1] (Suspended: Signal 'SIGILL' received. Description: Illegal instruction.)
1 <symbol is not available> 0x812feb44
Qu'est-ce que ça veut dire? Le compilateur a-t-il généré du code illégal pour une raison quelconque? J'ai un point d'arrêt dans le constructeur (qui ne fait rien), et il n'est pas touché. J'ai déjà fait une reconstruction complète.
Que pourrais-je faire de mal pour causer ce problème?
la source
Il peut s'agir d'un pointeur de fonction non initialisé, en particulier si vous avez corrompu la mémoire (alors la fausse vtable de mauvais pointeurs C ++ vers des objets invalides pourrait donner cela).
BTW
gdb
watchpoints & tracepoints, ainsi que valgrind peuvent être utiles (si disponible) pour déboguer de tels problèmes. Ou un désinfectant pour adresses .la source
Assurez-vous que toutes les fonctions avec un type de retour non void ont une
return
instruction.Alors que certains compilateurs fournissent automatiquement une valeur de retour par défaut, d'autres enverront un SIGILL ou SIGTRAP au moment de l'exécution en essayant de laisser une fonction sans valeur de retour.
la source