是什么导致信号'SIGILL'?

我使用NDK和GCC将一些C ++代码移植到Android。 代码基本上运行。 有一点,在Eclipse中debugging时,调用

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

导致这个错误:

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

那是什么意思? 由于某种原因,编译器是否生成了非法代码? 我在构造函数中有一个断点(它什么都不做),并没有被打中。 我已经完成了重build。

我能做什么错误导致这个问题?

它现在有效。 对于任何与Android / NDK / GCC / Eclipse苦苦挣扎的人,下面是我解决它的方法:

  1. 满月时在午夜埋葬一只死猫
  2. 重新启动Android设备模拟器

还没有validation两步是否真的有必要,如果没有,哪一个是多余的。

这意味着CPU试图执行一个不明白的指令。 这可能是由我猜想的腐败造成的,也可能是因为错误的架构而编译的(在这种情况下,我会认为O / S会拒绝运行可执行文件)。 不完全确定根本问题是什么。

它可能是一些未初始化的函数指针,特别是如果你有损坏的内存(然后虚假的C ++错误指针对无效对象可能会给)。

BTW gdb观察点和跟踪点,以及valgrind可能是有用的(如果可用)debugging这样的问题。 或者一些地址消毒剂 。