Xcode / objective c并没有真正打印出有用的堆栈跟踪。我的应用程序崩溃了,该死的东西只给我45353453,34524323,6745345353,457634524234这样的数字。完全没用。
所以我想制作一个NSLog();在我的整个应用程序中的每个方法的开头。但也许有一种更简单的方法来找出真正的堆栈跟踪,人性可读?不仅在应用程序启动或崩溃时,而且在所有发生的活动中始终如此?有助于调试很多。
答案 0 :(得分:5)
这样的事情对你也有帮助
@implementation UIApplication (MyCategory)
+ (void)logStackTrace {
@try {
[[NSException exceptionWithName:@"Stack Trace" reason:@"Testing" userInfo:nil] raise];
}
@catch (NSException *e) {
NSLog(@"%@", [e callStackSymbols]);
}
}
@end
答案 1 :(得分:3)
为objc_exception_throw添加一个全局断点,然后你可以在调试器中获得一个有用的堆栈跟踪。
答案 2 :(得分:1)
确实无法在应用内可靠地完成此操作。如果你的应用程序崩溃而没有给出符号,这听起来像是你运行的剥离版本而不是调试版本?
如果您有未解压缩的版本,则可以使用atos
命令关联这些数字与堆栈帧的实际名称(请参阅终端中的man atos
或搜索atos
在Xcode的文档或Google)中。
您可能不希望记录每个方法调用的堆栈。信息量很快就会变得无法抗拒。关于为什么你的应用程序中的大多数方法被调用都不应该是一个谜(尽管需要一段时间来理解为什么UIKit和你的应用程序之间的界面按照它的方式工作)。