我想在某些点记录调用跟踪,比如失败的断言或未捕获的异常。
这基本上告诉你该怎么做。
本质上,你需要设置应用程序异常处理日志,类似于:
#import <ExceptionHandling/NSExceptionHandler.h>
[[NSExceptionHandler defaultExceptionHandler]
setExceptionHandlingMask: NSLogUncaughtExceptionMask |
NSLogUncaughtSystemExceptionMask |
NSLogUncaughtRuntimeErrorMask]
Cocoa已经将未捕获异常的堆栈跟踪记录到控制台,尽管它们只是原始内存地址。如果你想要控制台的符号信息,有一些来自苹果的示例代码。
如果您想在代码中的任意点生成堆栈跟踪(并且您在Leopard上),请参阅反向跟踪手册页。在使用Leopard之前,您实际上必须挖掘调用堆栈本身。
这段代码适用于任何线程:
NSLog(@"%@", NSThread.callStackSymbols);
返回包含调用堆栈符号的数组。每个元素都是一个NSString对象,其值的格式由backtrace_symbols()函数决定。
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;
}
}
推荐文章
- 如何停止不必要的UIButton动画标题变化?
- 如何在我的iPhone应用程序中使用NSError ?
- Objective-C中的自动引用计数不能防止或减少什么样的泄漏?
- 如何精确地以毫秒为单位记录方法的执行时间?
- 保存字符串到NSUserDefaults?
- 查看保存的NSUserDefaults的简单方法?
- 如何添加UITableViewCell之间的间距
- 在为设备编译时,Apple Mach-O连接器错误
- 使用isKindOfClass与Swift
- 理解设置
- 架构i386的未定义符号:_OBJC_CLASS_$_SKPSMTPMessage",引用自:错误
- Objective-C中方法混合的危险是什么?
- 如何使用接口生成器创建的nib文件加载UIView
- 如何设置回退按钮文本在Swift
- 如何比较两个nsdate:哪个是最近的?