首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是什么导致信号'SIGILL'?

是什么导致信号'SIGILL'?
EN

Stack Overflow用户
提问于 2011-10-26 19:17:38
回答 3查看 133.7K关注 0票数 98

我正在使用NDK和GCC将一些C++代码移植到安卓。代码基本上是运行的。在Eclipse中调试时,调用

代码语言:javascript
复制
Dabbler::Android::Factory* pFactory = new Dabbler::Android::Factory;

导致此错误:

代码语言:javascript
复制
Thread [1] (Suspended: Signal 'SIGILL' received. Description: Illegal instruction.) 
    1  0x812feb44

这是什么意思?编译器是否出于某种原因生成了非法代码?我在构造函数中有一个断点(什么也不做),它没有命中。我已经做了一个完整的重建。

我做错了什么才会导致这个问题?

EN

回答 3

Stack Overflow用户

发布于 2019-07-12 00:12:44

确保所有具有非void返回类型的函数都具有return语句。

虽然有些编译器会自动提供默认返回值,但其他编译器会在运行时发送SIGILL或SIGTRAP,试图让函数不带返回值。

票数 33
EN

Stack Overflow用户

发布于 2011-10-26 19:20:12

这意味着CPU试图执行它不理解的指令。我猜这可能是由损坏引起的,或者可能是为错误的体系结构编译的(在这种情况下,我会认为O/S会拒绝运行可执行文件)。不完全确定根本问题是什么。

票数 31
EN

Stack Overflow用户

发布于 2011-10-26 19:31:25

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

顺便说一句,gdb 观察点和跟踪点,以及valgrind可能对调试此类问题很有用(如果可用)。 或者一些地址消毒剂address sanitizer.

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7901867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档