iOS上的Android堆栈跟踪?

时间:2013-05-30 05:07:46

标签: ios xcode ipa

iOS上是否存在类似Android StackTrace的堆栈跟踪?

我发现Android堆栈跟踪很容易阅读。与下面的例子类似,第15行的TabChooser.java类错误,错误类型为java.lang.ArithmeticException: divide by zero

11-21 20:55:47.360: W/System.err(989): java.lang.ArithmeticException: divide by zero
11-21 20:55:47.379: W/System.err(989):  at test.tabs.TabChooser.onCreate(TabChooser.java:15)
11-21 20:55:47.390: W/System.err(989):  at android.app.Activity.performCreate(Activity.java:4465)

如何在生产(Xcode)和发布(设备日志崩溃报告)时执行此操作

2 个答案:

答案 0 :(得分:0)

您可以使用以下代码在NSLog中打印堆栈跟踪。

NSLog(@"Stack trace : %@",[NSThread callStackSymbols]);

或者您可以通过

获取模拟器日志

打开终端并输入:tail -f /var/log/system.log

然后运行模拟器。

答案 1 :(得分:0)

#include <execinfo.h>声明:

int backtrace(void**,int)
    __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);

char** backtrace_symbols(void* const*,int)
    __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);

您可以使用它来轻松地构建回溯信息。

请注意,这些是您必须进行的函数调用,默认情况下您没有catch-all处理程序。因此,您将不得不考虑如何处理支持硬件和API异常(个人而言,我不支持这些,但此域中的致命错误非常罕见)。

man:https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/backtrace_symbols.3.html

示例用法:http://tdistler.com/2008/11/15/how-to-print-a-stack-backtrace-programatically-in-linux

获取C ++符号的demangled名称是一个单独的步骤。