我正在使用NDK和GCC将一些C++代码移植到安卓。代码基本上是运行的。在Eclipse中调试时,调用
Dabbler::Android::Factory* pFactory = new Dabbler::Android::Factory;
导致此错误:
Thread [1] (Suspended: Signal 'SIGILL' received. Description: Illegal instruction.)
1 0x812feb44
这是什么意思?编译器是否出于某种原因生成了非法代码?我在构造函数中有一个断点(什么也不做),它没有命中。我已经做了一个完整的重建。
我做错了什么才会导致这个问题?
发布于 2019-07-12 00:12:44
确保所有具有非void返回类型的函数都具有return
语句。
虽然有些编译器会自动提供默认返回值,但其他编译器会在运行时发送SIGILL或SIGTRAP,试图让函数不带返回值。
发布于 2011-10-26 19:20:12
这意味着CPU试图执行它不理解的指令。我猜这可能是由损坏引起的,或者可能是为错误的体系结构编译的(在这种情况下,我会认为O/S会拒绝运行可执行文件)。不完全确定根本问题是什么。
发布于 2011-10-26 19:31:25
它可能是一些未初始化的函数指针,特别是如果你有损坏的内存(那么指向无效对象的C++错误指针的虚假vtable可能会给出这一点)。
顺便说一句,gdb 观察点和跟踪点,以及valgrind可能对调试此类问题很有用(如果可用)。 或者一些地址消毒剂address sanitizer.
https://stackoverflow.com/questions/7901867
复制相似问题