UIApplication OpenURL与0x000000008badf00d崩溃

时间:2016-06-24 14:56:51

标签: ios multithreading crash-reports openurl

我在iOS 9.3.x上的OpenURL崩溃非常奇怪。管道如下:

  1. on applicationDidBecomeActive我调用方法,该方法调用不同线程上的方法
  2. 在那些线程上我打电话给openURL:
  3. 应用程序在调用objc_sync_enter后崩溃(没有调用objc_sync_exit,因此似乎线程已被锁定)。
  4. 主线程的崩溃日志:

    0   libsystem_kernel.dylib          0x0000000181c83f6c __psynch_mutexwait + 8
    1   libsystem_pthread.dylib         0x0000000181d5239c _pthread_mutex_lock_wait + 96
    2   libsystem_pthread.dylib         0x0000000181d5257c _pthread_mutex_lock_slow + 296
    3   libobjc.A.dylib                 0x000000018175b780 recursive_mutex_tt<false>::lock() + 16
    4   libobjc.A.dylib                 0x000000018175e110 objc_sync_enter + 28
    5   App     0x00000001001ef7c4 -[TouchIDLoginManager isShowingTouchId] + 20
    6   App     0x000000010019c0c0 +[UIApplicationDelegate applicationDidBecomeActive:] + 64
    7   App     0x000000010019aa14 -[NSObject(UIApplicationDelegate) p_ApplicationDidBecomeActive:] + 64
    

    来自线程的堆栈,我在其中调用openURL:

    Thread 17 name:  Dispatch queue: la_client
    Thread 17:
    0   libsystem_kernel.dylib          0x0000000181c69014 semaphore_wait_trap + 8
    1   libdispatch.dylib               0x0000000181b463e8 _dispatch_semaphore_wait_slow + 244
    2   libxpc.dylib                    0x0000000181d82620 xpc_connection_send_message_with_reply_sync + 204
    3   MobileCoreServices              0x000000018391214c _LSStartOpenOperation + 232
    4   MobileCoreServices              0x0000000183939e18 -[LSOpenOperation main] + 1160
    5   MobileCoreServices              0x0000000183919ad4 -[LSApplicationWorkspace openURL:withOptions:error:] + 472
    6   UIKit                           0x00000001874f0ec8 -[UIApplication _openURL:] + 356
    7   AppKinetics-SaveEditClient      0x00000001001ebda0 -[UIApplication(some_category) openURLReplacement:] + 500
    

    因此,有些类别会替换openURL,但在某些特定的调用中只会调用openURL。我发现解决方案使用不同的队列来调用openURL,但在我的情况下它已经调用了不同的线程。

    常见原因:

    Exception Type:  00000020
    Exception Codes: 0x000000008badf00d
    Exception Note:  SIMULATED (this is NOT a crash)
    Highlighted by Thread:  17
    

    因此,应用程序被操作系统杀死。问题在Xcode调试下不可重现,并且只是偶尔重现。

    缺少objc_sync_enter是否意味着主线程出现死锁?我的问题是关于死锁的根源,我知道,0x000000008badf00d代码意味着什么

    是否有人知道此案例的解决方法?

    这个问题的根源是什么?

    提前致谢。

0 个答案:

没有答案