Вопрос по objective-c – EXC_BAD_INSTRUCTION (код = EXC_I386_INVOP, субкод = 0x0)

20

Я действительно не могу понять, почему у меня есть эта ошибка.

Прежде всего остановка отладчика на машинном коде

enter image description here

В теме тоже ничего не отображается. Программа останавливается без кода на самом деле

enter image description here

Так что это как-то связано с _dispatch_worker_thread

Что это такое?

В любом случае, как я могу отладить это? Должен ли я просто откат?

Я попробую. По какой-то причине это больше не повторится. Кроме того, потому что я использую ARC, я думаю, что релиз и вещи должны быть убраны. user4951
Обычно это происходит, когда объект уже был освобожден, прежде чем вы захотите его использовать.This blog может помочь, но покажите немного кода тоже. Tikkes
У вас установлена точка останова для исключений? Перейдите на вкладку точек останова - & gt; Нажмите кнопку плюса в левом нижнем углу - & gt; Нажмите «Добавить исключительную точку останова»; - & GT; Хит сделано с настройками по умолчанию нормально. Тогда беги снова Paul.s
Благодаря @ Paul.s. Я пытался решить эту проблему в течение нескольких часов. Прочитав ваш комментарий, я отключил все точки останова. СЕЙЧАС ОНА БУДЕТ. Поэтому я должен установить точку останова в неправильном месте. Sandi Laufenberg-Deku

Ваш Ответ

3   ответа
8

Этот вид сбоя произойдет, когда вы используете (векторное) расширение, которое не поддерживается вашим процессором.

Например, в xcode 5 в разделе «project-settings / build-settings / Code Generation» установите & quot; Включить дополнительные векторные расширения & quot; на "AVX2". Создайте свой исполняемый файл.

Теперь запустите его на:

  • Intel Core i5: it's going to crash (wherever the compiler decided to use avx2) with 'exc_i386_invop subcode=0x0'.
  • Intel Core i7: it will work.
Error: User Rate Limit Exceeded
0

В моем случае я добавил наблюдателя дляcontentSize кUITextView в viewDidLoad и никогда не удалял его. Исправил, добавив вviewDidAppear а затем удалив его вviewWillDisappear. It was so annoying to find out :(

Добавить наблюдателя вviewDidAppear

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

Удалить наблюдателя вviewWillDisappear

[self.textViewMessage removeObserver:self forKeyPath:NSStringFromSelector(@selector(contentSize))];
5

EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP) является побочным продуктом__builtin_trap() - которая является внутренней функцией GCC и clang. На х86 это мы получаем

    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 мы это компилируемtrap и приводит кtrace точка останова в XCode. Это ошибка вclang у нас здесь?

В конечном счете, в контексте исходного вопроса, я подозреваю, что сбой библиотечной функции достиг утверждения.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы