我们在其中一个应用程序的/var/log/messages中看到了下面提到的几条消息:
Sep 18 03:24:23 <machine_name> kernel: application_name[14682] trap invalid opcode rip:f6c6e3ce rsp:ffc366bc error:0
...
Sep 18 03:19:35 <machine_name> kernel: application_name[4434] general protection rip:f6cd43a2 rsp:ffdfab0c error:7b2我不能弄清楚这些输出意味着什么,以及我们如何跟踪导致问题的函数/代码。
发布于 2010-09-21 16:40:41
通常,这意味着您的程序的指令指针指向数据或垃圾。这通常是由于写到零散指针之类的东西造成的。
一种情况是,您的代码(通过一个零散指针)写入某个类的虚拟表,将成员函数地址替换为无意义的。下次调用类的虚函数时,您的程序将把垃圾解释为地址并跳转到该地址。如果位于此地址的任何数据碰巧不是您的处理器的有效机器代码指令,您将看到此错误。
发布于 2010-09-21 17:08:23
还有另一种可能导致操作码无效,那就是硬件不支持较新的操作码/指令集(SSE 4/5),或者不是来自正确的制造商( AMD和英特尔都有一些特定的操作码,只能在他们的处理器上工作),或者只是没有权限执行某些操作(尽管这可能会显示为其他东西)。
根据上面的说明,我认为RIP是“寄存器(?)指令指针”,RSP是“寄存器堆栈指针”,在这种情况下,你可以使用调试器,在指定的地址(RIP)上设置一个执行硬件断点,并跟踪调用它的东西。(看起来你使用的是linux或unix,所以这是相当模糊的)。如果您使用的是windows,请尝试使用自定义异常筛选器来捕获EXCEPTION_ILLEGAL_INSTRUCTION事件,以获取更多信息
https://stackoverflow.com/questions/3758301
复制相似问题