是否可以捕获第三方iOS库异常?

时间:2016-11-22 14:31:36

标签: ios objective-c exception crash

我的Objective-C应用程序正在使用第三方VoIP SDK。我发现应用程序如果一夜之间就会崩溃。只有在我启用SDK时才会发生崩溃,因此我强烈怀疑它会导致崩溃。

该库是一个静态库(.a扩展名)。我尝试使用try-catch块和NSSetUncaughtExceptionHandler捕获异常,但它没有工作。我怀疑这些方法只适用于Objective-C异常,而SDK是用本机C编写的吗?

是否可以捕获第三方本机C异常?我对任何类型的黑客都很好,因为这不会进入生产代码。只是试图找到问题的根源。

编辑: 这是崩溃日志:

    Hardware Model:      iPad5,1
    Version:             0.14 (6.0)
    Beta:                YES
    Code Type:           ARM-64 (Native)
    Role:                Foreground
    Parent Process:      launchd [1]


    Date/Time:           2016-11-22 08:24:59.7336 -0500
    Launch Time:         2016-11-21 13:45:09.9956 -0500
    OS Version:          iPhone OS 10.1.1 (14B100)
    Report Version:      104

    Exception Type:  EXC_CRASH (SIGABRT)
    Exception Codes: 0x0000000000000000, 0x0000000000000000
    Exception Note:  EXC_CORPSE_NOTIFY
    Triggered by Thread:  0

    Application Specific Information:
    abort() called

    Filtered syslog:
    None found

    Last Exception Backtrace:
    (0x18953e1c0 0x187f7855c 0x18953e108 0x18f89359c 0x18f6f4444 0x18f4c653c
 0x18f391d48 0x18f391c78 0x18f44bb10 0x18f44aec0 0x18f44a90c 0x18f44a4c0
 0x18f44a424 0x18f38f220 0x18c84f188 0x18c843e64 0x18c843d24 0x18c7c07ec 
0x18c7e7c58 0x18c7e8678 0x1894eb7dc 0x1894e940c 0x1894e989c 0x189418048 
0x18ae9e198 0x18f3fd2fc 0x18f3f8034 0x10002304c 0x1883fc5b8)

    Thread 0 name:  Dispatch queue: com.apple.main-thread
    Thread 0 Crashed:
    0   libsystem_kernel.dylib          0x000000018850e014 0x1884ef000 + 126996
    1   libsystem_pthread.dylib         0x00000001885d6450 0x1885d1000 + 21584
    2   libsystem_c.dylib               0x00000001884823e0 0x18841f000 + 406496
    3   libc++abi.dylib                 0x0000000187f4d2d4 0x187f4c000 + 4820
    4   libc++abi.dylib                 0x0000000187f6acc0 0x187f4c000 + 126144
    5   libobjc.A.dylib                 0x0000000187f78844 0x187f70000 + 34884
    6   libc++abi.dylib                 0x0000000187f6766c 0x187f4c000 + 112236
    7   libc++abi.dylib                 0x0000000187f67234 0x187f4c000 + 111156
    8   libobjc.A.dylib                 0x0000000187f7871c 0x187f70000 + 34588
    9   CoreFoundation                  0x00000001894180bc 0x18940f000 + 37052
    10  GraphicsServices                0x000000018ae9e198 0x18ae92000 + 49560
    11  UIKit                           0x000000018f3fd2fc 0x18f382000 + 504572
    12  UIKit                           0x000000018f3f8034 0x18f382000 + 483380
    13  Remote                          0x000000010002304c 0x100008000 + 110668
    14  libdyld.dylib                   0x00000001883fc5b8 0x1883f8000 + 17848

1 个答案:

答案 0 :(得分:4)

这不是一个可捕获的异常,那是一次严重的崩溃。而且,具体而言,这是一次有目的的崩溃;主线程上的某些东西决定事情已经变得非常糟糕,它叫abort()

所以,不,你没办法抓住它,而且在崩溃日志的情况下,甚至不清楚崩溃是由第三方库触发的。