0

libdispatch の内部関数内で奇妙なクラッシュが発生しており、何時間にもわたる調査の結果、何が起こっているのかわかりません。

クラッシュ トレースは次のとおりです。

Incident Identifier: 7A5CBCD8-28A3-4AC5-937A-D5BA69A64B67
CrashReporter Key:   [TODO]
Hardware Model:      iPhone5,2
Process:         Memoir Dev [6973]
Path:            /Users/USER/Memoir Dev.app/Memoir Dev
Identifier:      com.veri.memoir-enterprise
Version:         0.9.191
Code Type:       ARM
Parent Process:  launchd [1]

Date/Time:       2013-03-03 20:55:42 +0000
OS Version:      iPhone OS 6.1.2 (10B146)
Report Version:  104

Exception Type:  SIGABRT
Exception Codes: #0 at 0x3ae66350
Crashed Thread:  1

Thread 0:
0   libsystem_kernel.dylib              0x3ae55e30 _mach_msg_trap + 20
1   CoreFoundation                      0x000972bb __CFRunLoopServiceMachPort + 131
2   CoreFoundation                      0x00095fdb __CFRunLoopRun + 819
3   CoreFoundation                      0x32bc823d _CFRunLoopRunSpecific + 357
4   CoreFoundation                      0x32bc80c9 _CFRunLoopRunInMode + 105
5   GraphicsServices                    0x367a633b _GSEventRunModal + 75
6   UIKit                               0x34ae42b9 _UIApplicationMain + 1121
7   Memoir Dev                          0x0002a0d7 main (main.m:20)

Thread 1 Crashed:
0   libsystem_kernel.dylib              0x3ae66350 ___pthread_kill + 8
1   libsystem_c.dylib                   0x3ae1936b _abort + 95
2   libsystem_c.dylib                   0x3adb212d _free + 361
3   libdispatch.dylib                   0x000088d1 _dispatch_kevent_register + 169
4   libdispatch.dylib                   0x00007e91 _dispatch_source_kevent_register + 33
5   libdispatch.dylib                   0x00008957 _dispatch_timer_list_update + 27
6   libdispatch.dylib                   0x00006b81 _dispatch_mgr_invoke + 389
7   libdispatch.dylib                   0x00002378 _dispatch_mgr_thread + 36

Thread 2:
0   libsystem_kernel.dylib              0x3ae55e30 _mach_msg_trap + 20

[...]

私たちのコードとシナリオについての背景:

  • サーバーにデータをアップロードするためにNSOperationsとGCDを広く使用しています
  • アプリが 10 分の制限内でバックグラウンドでアップロードしているときにクラッシュが発生するようです
  • クラッシュは、iOS 6.1 (10B143) を使用して 2 月 9 頃に発生し始めました。これは、6.0.2 から 6.1 にアップグレードしてからわずか数日後のことです。
  • これまでのところ、iOS 6.1.2 (10B146) では再現できますが、6.0.1 (10A523) では再現できません。
  • SIGABRT 例外タイプに関しては、誰かが「abort」関数を呼び出しているようです (実際、「dispatch_kevent_register」によって呼び出される「無料」です)。

iOS 6.1 以降の GCD 内に既知の問題があるかどうか知っている人はいますか?

4

1 に答える 1

2

これは、プロセスでのヒープの破損が原因で、free() が中止されています。

abort() をヒットしたディスパッチ マネージャー スレッドは、偶発的である可能性があります (バックトレースは、新しいディスパッチ タイマー ソースを非同期にインストールするためにウェイクアップし、その時点で malloc が破損を検出したことを示します)。

GuardMalloc (XCode スキーム エディターの [診断] タブを参照) で実行してみると、破損が実際に発生したときにクラッシュポイントが発生する可能性が高くなります。

あるいは、さまざまな malloc デバッグ環境変数が原因を突き止めるのに役立つ場合があります。malloc(3) の ENVIRONMENT を参照してください。

于 2013-03-05T07:36:27.490 に答える