Я портирую код C ++ на Android с помощью NDK и GCC. Код в основном работает. В какой-то момент при отладке в Eclipse вызов
Dabbler::Android::Factory* pFactory = new Dabbler::Android::Factory;
вызывает эту ошибку:
Thread [1] (Suspended: Signal 'SIGILL' received. Description: Illegal instruction.)
1 <symbol is not available> 0x812feb44
Что это значит? Компилятор по какой-то причине сгенерировал недопустимый код? У меня есть точка останова в конструкторе (который ничего не делает), и он не попадает. Я уже сделал полную перестройку.
Что я мог делать не так, чтобы вызвать эту проблему?
android
c++
android-ndk
porting
Dabbler
источник
источник
Это может быть какой-то неинициализированный указатель на функцию, в частности, если у вас повреждена память (тогда это может дать фиктивная vtable плохих указателей C ++ на недопустимые объекты).
BTW точки
gdb
наблюдения и трассировки, а также valgrind могут быть полезны (если доступны) для отладки таких проблем. Или какое-нибудь дезинфицирующее средство для адресов .источник
Убедитесь, что все функции с ненулевым типом возврата имеют
return
оператор.В то время как некоторые компиляторы автоматически предоставляют возвращаемое значение по умолчанию, другие отправляют SIGILL или SIGTRAP во время выполнения при попытке оставить функцию без возвращаемого значения.
источник