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)和发布(设备日志崩溃报告)时执行此操作
答案 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异常(个人而言,我不支持这些,但此域中的致命错误非常罕见)。
示例用法:http://tdistler.com/2008/11/15/how-to-print-a-stack-backtrace-programatically-in-linux
获取C ++符号的demangled名称是一个单独的步骤。