Estou portando algum código C ++ para Android usando NDK e GCC. O código basicamente é executado. Em um ponto, ao depurar no Eclipse, a chamada
Dabbler::Android::Factory* pFactory = new Dabbler::Android::Factory;
causa este erro:
Thread [1] (Suspended: Signal 'SIGILL' received. Description: Illegal instruction.)
1 <symbol is not available> 0x812feb44
O que isso significa? O compilador gerou código ilegal por algum motivo? Eu tenho um ponto de interrupção no construtor (que não faz nada) e não é atingido. Já fiz uma reconstrução completa.
O que posso estar fazendo de errado para causar esse problema?
android
c++
android-ndk
porting
Dabbler
fonte
fonte
Pode ser algum ponteiro de função não inicializado, em particular se você tiver corrompido a memória (então a tabela vtable de ponteiros ruins C ++ para objetos inválidos pode fornecer isso).
BTW
gdb
watchpoints & tracepoints, e também valgrind podem ser úteis (se disponível) para depurar tais problemas. Ou algum desinfetante de endereços .fonte
Certifique-se de que todas as funções com tipo de retorno não nulo tenham uma
return
instrução.Enquanto alguns compiladores fornecem automaticamente um valor de retorno padrão, outros enviarão um SIGILL ou SIGTRAP em tempo de execução ao tentar deixar uma função sem um valor de retorno.
fonte