我想在某些点记录调用跟踪,比如失败的断言或未捕获的异常。
当前回答
用这种快速印刷方式:
print("stack trace:\(Thread.callStackSymbols)")
其他回答
这段代码适用于任何线程:
NSLog(@"%@", NSThread.callStackSymbols);
返回包含调用堆栈符号的数组。每个元素都是一个NSString对象,其值的格式由backtrace_symbols()函数决定。
这基本上告诉你该怎么做。
本质上,你需要设置应用程序异常处理日志,类似于:
#import <ExceptionHandling/NSExceptionHandler.h>
[[NSExceptionHandler defaultExceptionHandler]
setExceptionHandlingMask: NSLogUncaughtExceptionMask |
NSLogUncaughtSystemExceptionMask |
NSLogUncaughtRuntimeErrorMask]
如果你想把它作为NSString。
[NSThread callStackSymbols].description
用这种快速印刷方式:
print("stack trace:\(Thread.callStackSymbols)")
n13的答案不太管用——我稍微修改了一下,得出了这个答案
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char *argv[])
{
@autoreleasepool {
int retval;
@try{
retval = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
@catch (NSException *exception)
{
NSLog(@"Gosh!!! %@", [exception callStackSymbols]);
@throw;
}
return retval;
}
}
推荐文章
- iOS -构建失败,CocoaPods无法找到头文件
- Xcode 4挂在“附加到(应用程序名称)”
- 为什么单元测试中的代码不能找到包资源?
- 以编程方式创建segue
- 在Objective-C中@synchronized如何锁定/解锁?
- Xcode构建失败“架构x86_64未定义的符号”
- 动态改变UILabel的字体大小
- registerForRemoteNotificationTypes: iOS 8.0及以上版本不支持
- 新的自动引用计数机制是如何工作的?
- 如何测试对象在Objective-C中的类?
- 是否有可能禁用浮动头在UITableView与UITableViewStylePlain?
- 从Cocoa应用程序执行一个终端命令
- Swift编译器错误:“框架模块内的非模块化头”
- 从父iOS访问容器视图控制器
- 自定义dealloc和ARC (Objective-C)