24

なぜこのバグがあるのか​​ 本当にわかりません。

まず、デバッガーはマシンコードで停止します

ここに画像の説明を入力

スレッドにも何も表示されません。プログラムは実際にはコードなしで停止します

ここに画像の説明を入力

したがって、_dispatch_worker_thread と関係があります

それは何ですか?

どうすればこれをデバッグできますか? ロールバックするだけですか?

4

3 に答える 3

8

この種のクラッシュは、CPU でサポートされていない (ベクター) 拡張機能を実行しているときに発生します。

たとえば、「project-settings / build-settings / Code Generation」の下の xcode 5 で、「Enable Additional Vector extensions」を「AVX2」に設定します。実行可能ファイルをビルドします。

次に、次の場所で実行します。

  • Intel Core i5: 'exc_i386_invop subcode=0x0' で (コンパイラが avx2 の使用を決定した場所で) クラッシュします。
  • Intel Core i7: 動作します。
于 2014-01-01T22:46:27.360 に答える
7

EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP)__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 では、これがコンパイルされ、XCodetraptraceブレークポイントになります。これはバグclangですか?

最終的に元の質問のコンテキストでは、失敗しているライブラリ関数がアサーションにヒットしたのではないかと思います。

于 2012-09-04T11:21:18.877 に答える