如何使用NSSetUncaughtExceptionHandler获取未捕获异常的类,方法和行号

时间:2015-01-15 09:21:46

标签: ios objective-c uncaught-exception

我使用NSSetUncaughtExceptionHandler(&HandleExceptions);来处理方法

中未捕获的异常
void HandleExceptions(NSException *exception)
{
}   

我想打印任何解决方案发生异常的类,方法和行号吗?

我正在进行跟踪堆栈跟踪

0   appName                            0x00000001000b6a20 HandleExceptions + 584
    1   appName                            0x00000001002175f0 GAIUncaughtExceptionHandler + 716
    2   CoreFoundation                      0x00000001852fe95c <redacted> + 692
    3   libobjc.A.dylib                     0x0000000195a103b4 <redacted> + 116
    4   libc++abi.dylib                     0x0000000195211bb4 <redacted> + 16
    5   libc++abi.dylib                     0x000000019521173c __cxa_rethrow + 144
    6   libobjc.A.dylib                     0x0000000195a10294 objc_exception_rethrow + 44
    7   CoreFoundation                      0x00000001851e1154 CFRunLoopRunSpecific + 572
    8   GraphicsServices                    0x000000018e38b5a4 GSEventRunModal + 168
    9   UIKit                               0x0000000189b163c0 UIApplicationMain + 1488
    10  appName                            0x00000001000a8584 main + 108
    11  libdyld.dylib                       0x000000019607ea08 <redacted> + 4

1 个答案:

答案 0 :(得分:1)

处理程序获取NSException的实例。有两种方法:-callStackSymbols-callStackReturnAddresses

如果可能,

-callStackSymbols会为您提供回溯字符串。

看起来像这样:

0   TestArrayCopy                       0x0000000100000dfe -[MyClass method] + 46
1   TestArrayCopy                       0x0000000100000e97 main + 87
2   libdyld.dylib                       0x00007fff940be5fd start + 1
3   ???                                 0x0000000000000001 0x0 + 1

如您所见,有一个关于方法所有者(实例方法为-),类名(MyClass)和方法名称(method)的信息。 / p>