24

我真的不知道为什么我有这个错误。

首先调试器停在机器码

在此处输入图像描述

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

在此处输入图像描述

所以它与_dispatch_worker_thread有关

那是什么?

有什么办法可以调试这个?我应该回滚吗?

4

3 回答 3

8

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

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

现在运行它:

  • 英特尔酷睿 i5:它将崩溃(无论编译器决定使用 avx2),并带有“exc_i386_invop subcode=0x0”。
  • 英特尔酷睿 i7:它会工作。
于 2014-01-01T22:46:27.360 回答
7

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

指令ud2是这里的罪魁祸首,Xcode 没有专门处理。

在 ARM 上,我们将其编译为XCodetrap并导致trace断点。这是clang我们这里的一个错误吗?

最终,在原始问题的上下文中,我怀疑失败的库函数已经达到了断言。

于 2012-09-04T11:21:18.877 回答
0

在我的情况下,我在 viewDidLoad 中添加了一个观察者,contentSize并且UITextView从未删除它。viewDidAppear通过添加它然后将其删除来修复它viewWillDisappear。发现太烦人了:(

添加观察者viewDidAppear

[self.textViewMessage addObserver:self
                           forKeyPath:NSStringFromSelector(@selector(contentSize))
                              options:NSKeyValueObservingOptionNew
                              context:nil];

删除观察者viewWillDisappear

[self.textViewMessage removeObserver:self forKeyPath:NSStringFromSelector(@selector(contentSize))];
于 2017-12-27T03:51:41.203 回答