EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0)

use*_*951 21 objective-c xcode4.3

我真的无法弄清楚为什么我有这个bug.

首先,调试器停在机器代码处

在此输入图像描述

线程也没有显示任何内容.程序实际上没有代码停止

在此输入图像描述

所以它与_dispatch_worker_thread有关

那是什么?

我怎么能调试这个?我应该回滚吗?

kal*_*iya 8

当您运行CPU上不支持的(向量)扩展时,会发生这种崩溃.

例如,在"project-settings/build-settings/Code Generation"下的xcode 5中,将"Enable Additional Vector extensions"设置为"AVX2".构建可执行文件.

现在运行它:

  • 英特尔酷睿i5:它会在'exc_i386_invop subcode = 0x0'时崩溃(编译器决定使用avx2的地方).
  • 英特尔酷睿i7:它会工作.


mar*_*rko 6

EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP)是a的副产品__builtin_trap()- 这是GCC和clang内在功能.在x86上,我们得到了

    0x4dfa2:  movl   %esi, (%esp)
    0x4dfa5:  movl   %edx, 4(%esp)
    0x4dfa9:  movl   %eax, 8(%esp)
    0x4dfad:  calll  0x110ffa                  ; symbol stub for: objc_msgSend
    0x4dfb2:  cmpb   $0, %al
    0x4dfb4:  je     38
 -> 0x4dfba:  ud2    
    0x4dfbc:  movl   -32(%ebp), %eax
Run Code Online (Sandbox Code Playgroud)

该指令ud2是罪魁祸首,并不是由Xcode专门处理的.

在ARM上,我们编译trap并导致traceXCode 中的断点.这是clang我们在这里的一个错误吗?

最终在原始问题的上下文中,我怀疑失败的库函数已经触及了一个断言.