轻松打印应用程序的当前堆栈跟踪?

8 iphone debugging xcode cocoa-touch uikit

Xcode/objective c并没有真正打印出有用的堆栈跟踪.我的应用程序崩溃了,该死的东西只给我45353453,34524323,6745345353,457634524234这样的数字.完全没用.

所以我想制作一个NSLog(); 在我的整个应用程序中的每个方法的开头.但也许有一种更简单的方法来找出真正的堆栈跟踪,人性可读?不仅在应用程序启动或崩溃时,而且在所有发生的活动中始终如此?会帮助调试很多.

Bri*_*hal 5

这样的事情也可能对你有所帮助


@implementation UIApplication (MyCategory)

+ (void)logStackTrace {
    @try {
        [[NSException exceptionWithName:@"Stack Trace" reason:@"Testing" userInfo:nil] raise];
    }
    @catch (NSException *e) {
        NSLog(@"%@", [e callStackSymbols]);
    }
}

@end
Run Code Online (Sandbox Code Playgroud)

  • 这在iOS 4之前很有用.在iOS 4+中使用[NSThread callStackSymbols]. (8认同)

bbu*_*bum 1

实际上没有办法从应用程序内部可靠地执行此操作。如果您的应用程序崩溃并且没有给出符号,听起来您正在运行剥离的发行版本而不是调试版本?

如果您有未剥离的版本,则可以使用命令将这些数字与堆栈帧的实际名称关联起来atos(请参阅终端或在 Xcode 文档或 Google 中man atos搜索)。atos

您可能不想记录每个方法调用的堆栈。信息量很快就会变得难以承受。为什么你的应用程序中的大多数方法都会被调用,这不应该是一个谜(尽管需要一段时间才能理解为什么 UIKit 和你的应用程序之间的接口如此工作)。