关于signal SIGILL的一个问题

荃子 2010-11-29 01:08:46
运行程序,调试GDB, 出现的错误提示是Program terminated with signal SIGILL, Illegal instruction.每次都是在申请内存段的时候遇到SIGILL错误,很奇怪,不知道是什么原因,请问能否提供一些有关SIGILL错的提示信息?先谢谢了:)
...全文
2874 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
荃子 2010-12-01
  • 打赏
  • 举报
回复
memset(log,0x00,256)出错的原因在于品其后拼接log名称出现错误,应该算是一个隐藏的不深的BUG,只要在编译的时候将所有的warning去除了,就不会引发该错。
ayw215 2010-11-29
  • 打赏
  • 举报
回复
SIGILL 信号是cpu在发现非法指令之后发出一个异常,然后由负责处理该异常的内核的ISR对含有这个非法指令的进程发出的。程序收到这个信号,一般就是报 告 illegal instruction 错误信息。

可执行程序含有非法指令的原因,一般也就是cpu架构不对,编译时指定的march和实际执行的机器的march不同。这种情况,因为工具链一样,连接脚 本一样,所以可执行程序可以执行,不会发生exec format error。但是会包含一些不兼容的指令。还有另外一种可能,就是程序的执行权限不够,比如在目态下运行的程序只能执行非特权指令,一旦CPU遇到特权指 令,将产生illegal instruction错误。
解决c++中崩溃问题,捕捉程序中种种异常,产生dmp信息以方便修改, 适用windows平台。 1 CrashHooker 为异常捕捉模块 2 CrashRptTest 为模拟各种异常模块 【分为主线程和其他线程】 (1)seh (2)C++ terminate() call. (3)C++ unexpected() call. (4)C++ pure virtual function call (VS .NET and later). (5)C++ new operator fault (VS .NET and later). (6)Buffer overrun error (VS .NET only). (7)Invalid parameter exception (VS 2005 and later). (8)C++ SIGABRT signal (abort). (9)C++ SIGFPE signal (flotating point exception). (10)C++ SIGILL signal (illegal instruction). (11)C++ SIGINT signal (CTRL+C). (12)C++ SIGSEGV signal (invalid storage access). (13)C++ SIGTERM signal (termination request). (14)c++ vectored exception 3 CrashRptTest 模块设置异常捕获 (1)在主进程入口处定义CrAutoInstallHelper对象,并设置起启动参数。 注意:在定义CrAutoInstallHelper前调用SetErrorMode(SEM_NOGPFAULTERRORBOX), 定义CrAutoInstallHelper后调用DisableSetUnhandledExceptionFilter()接口, 这样可以在系统前捕获到异常。 (2)在线程入口处定义CrThreadAutoInstallHelper对象。 4 dmprpt 为信息和dmp收集模块,需要web配合可以参考php模块 (1) file.php 用于接收文件 【本机测试使用】 (2) test.php 用于保存参数 【本机测试使用】 5 进程间通信使用了共享内存技术,进行参数的传递, 参考CShareMemParas类,参数收集使用了CDmpInfoGather类,适合 社区项目,其他项目请酌情修改。

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧