【问题标题】:How to get Class , method and line number of uncaught exception using NSSetUncaughtExceptionHandler如何使用 NSSetUncaughtExceptionHandler 获取未捕获异常的类、方法和行号
【发布时间】:2015-01-15 09:21:45
【问题描述】:

我使用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

【问题讨论】:

  • 打印堆栈跟踪
  • @Rohit_RK - 你找到解决方案了吗?我有一个类似的问题,还没有合理的方法来解码它。
  • @KarthikSadhasivam 在 AppDelegate.m 中定义的句柄 'HandleExceptions(NSException *exception)' 方法中,您可以获得 NSException 的实例,我们可以使用它来查找未捕获的异常发生在我们代码中的确切位置。

标签: ios objective-c uncaught-exception


【解决方案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)的信息。

【讨论】:

  • 但 callStackSymbols 返回堆栈如何从中获取确切的 Class 、方法和行号
  • 你看过字符串了吗?我添加了一个解释。
  • 如何解码我得到的 StackSymbols??
  • 使用 NSStringNSScanner 或 $whatever。
  • 能否再次检查我的问题我已经添加了我正在获取的堆栈跟踪
猜你喜欢
  • 2010-11-19
  • 2010-11-20
  • 2015-10-28
  • 2015-04-22
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 2010-11-08
相关资源
最近更新 更多