Pregunta ¿Qué causa la señal 'SIGILL'?


Estoy portando un código C ++ a Android usando NDK y GCC. El código básicamente se ejecuta. En un punto, cuando se depura en Eclipse, la llamada

Dabbler::Android::Factory* pFactory = new Dabbler::Android::Factory;

causa este error:

Thread [1] (Suspended: Signal 'SIGILL' received. Description: Illegal instruction.)
1 <symbol is not available> 0x812feb44

Qué significa eso? ¿El compilador generó código ilegal por algún motivo? Tengo un punto de interrupción en el constructor (que no hace nada), y no se golpea. Ya hice una reconstrucción completa.

¿Qué podría estar haciendo mal para causar este problema?


75
2017-10-26 11:17


origen


Respuestas:


Ahora funciona. Para cualquier otra persona que tenga problemas con Android / NDK / GCC / Eclipse, así es como lo resolví:

  1. Enterrar a un gato muerto a la medianoche cuando la luna llena
  2. Reiniciar el emulador de dispositivo Android

No he verificado si ambos pasos son realmente necesarios y, de no ser así, cuál es redundante.


634
2017-10-26 12:02



Significa que la CPU intentó ejecutar una instrucción que no entendió. Esto podría ser causado por la corrupción, supongo, o tal vez se ha compilado para la arquitectura incorrecta (en cuyo caso, habría pensado que el O / S se negaría a ejecutar el ejecutable). No estoy del todo seguro de cuál es el problema de raíz.


19
2017-10-26 11:20



Podría ser algún puntero a la función no inicializada, en particular si tiene una memoria dañada (entonces, la vtable falsa de los punteros malos de C ++ a los objetos no válidos podría dar eso).

Por cierto gdb puntos de observación y puntos de referencia, y también valgrind podría ser útil (si está disponible) para depurar tales problemas. O algunos tratamiento sanitizante.


18
2017-10-26 11:31