如何从obj-c/ios中的堆栈跟踪获取源代码行

Len*_*sky 22 debugging stack exception-handling objective-c ios

NSSetUncaughtExceptionHandler用来将堆栈跟踪打印到iPhone中的本地文件,这将在下次启动应用程序时发送到我们的服务器.然后我可以检查异常数据并修复bug.在一些崩溃中,我有模块名称和抛出异常的函数,这些很容易.但大多数情况下我有这样的事情:

"4   libc++abi.dylib 0x35bba3c5 _ZL19safe_handler_callerPFvvE + 76",
"5   libc++abi.dylib 0x35bba451 _ZdlPv + 0",
"6   libc++abi.dylib 0x35bbb825 __cxa_current_exception_type + 0",
"7   libobjc.A.dylib 0x37bab2a9 objc_exception_rethrow + 12",
"8   CoreFoundation  0x3575a50d CFRunLoopRunSpecific + 404"
Run Code Online (Sandbox Code Playgroud)

例如:

*** -[__NSArrayI objectAtIndex:]: index 0 beyond bounds for empty array

但是我的应用程序中有几十个数组,所以我需要帮助才能找到引发异常的特定行,使用从堆栈跟踪中获取的数据.

有没有人知道来自Apple或其他的好文章/教程,在那里我可以学习解码堆栈跟踪中的数字以找到源代码中有问题的行.提前致谢!

bpo*_*lat 23

我强烈建议在Xcode中启用Exception Breakpoint.它将停止在崩溃应用程序的确切行上执行代码.因此,您无需担心崩溃导致的阵列原因.*** - [__ NSArrayI objectAtIndex:]:索引0超出空数组的边界

添加异常断点

  1. 转到Xcode上的Breakpoints部分
  2. 单击该部分底部的加号
  3. 选择"添加异常断点"

异常BreakPoint


Ram*_*uri -1

在 catch 块中设置断点,一旦代码流停止,您可以使用 gdb 命令,例如“bt”。