1

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

我发现 Android 堆栈跟踪很容易阅读。像下面的例子,第TabChooser.java15 行的错误类型,错误类型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)和发布时如何做(设备日志上的崩溃报告)

4

2 回答 2

0

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

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

否则您可以通过以下方式获取模拟器日志

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

然后运行模拟器。

于 2013-05-30T05:15:25.940 回答
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);

您可以使用它很容易地编写回溯信息。

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

人: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++ 符号的解构名称是一个单独的步骤。

于 2013-05-30T06:04:02.727 回答