我想在某些点记录调用跟踪,比如失败的断言或未捕获的异常。
当前回答
如果你想把它作为NSString。
[NSThread callStackSymbols].description
其他回答
如果你想把它作为NSString。
[NSThread callStackSymbols].description
这基本上告诉你该怎么做。
本质上,你需要设置应用程序异常处理日志,类似于:
#import <ExceptionHandling/NSExceptionHandler.h>
[[NSExceptionHandler defaultExceptionHandler]
setExceptionHandlingMask: NSLogUncaughtExceptionMask |
NSLogUncaughtSystemExceptionMask |
NSLogUncaughtRuntimeErrorMask]
对于异常,你可以使用异常userInfo字典的NSStackTraceKey成员来做这件事。请参阅Apple网站上控制程序对异常的响应。
Cocoa已经将未捕获异常的堆栈跟踪记录到控制台,尽管它们只是原始内存地址。如果你想要控制台的符号信息,有一些来自苹果的示例代码。
如果您想在代码中的任意点生成堆栈跟踪(并且您在Leopard上),请参阅反向跟踪手册页。在使用Leopard之前,您实际上必须挖掘调用堆栈本身。
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;
}
}
推荐文章
- 理解设置
- 架构i386的未定义符号:_OBJC_CLASS_$_SKPSMTPMessage",引用自:错误
- Objective-C中方法混合的危险是什么?
- 如何使用接口生成器创建的nib文件加载UIView
- 如何设置回退按钮文本在Swift
- 如何比较两个nsdate:哪个是最近的?
- 使UINavigationBar透明
- 删除/重置核心数据中的所有条目?
- Swift to Objective-C头未在Xcode 6中创建
- setNeedsLayout vs. setNeedsUpdateConstraints和layoutIfNeeded vs. updateConstraintsIfNeeded
- 不区分大小写的比较
- 编译警告:对于架构i386,没有处理文件的规则
- 从ViewController调用App Delegate方法
- 解释iOS7中automyadjustsscrollviewinsets, extendedlayoutinclesopaquebars, edgesForExtendedLayout之间的区别
- 你能把一个UIGestureRecognizer附加到多个视图吗?