我想在某些时间点记录呼叫跟踪,如失败的断言或未捕获的异常。如何打印堆栈跟踪到Cocoa的控制台/日志?
回答
NSLog(@"%@",[NSThread callStackSymbols]);
此代码适用于任何线程。
This几乎告诉你该怎么做。
基本上你需要设置的应用程序异常处理日志,是这样的:
#import <ExceptionHandling/NSExceptionHandler.h>
[[NSExceptionHandler defaultExceptionHandler]
setExceptionHandlingMask: NSLogUncaughtExceptionMask |
NSLogUncaughtSystemExceptionMask |
NSLogUncaughtRuntimeErrorMask]
不过请注意,这将只是一个注册的异常处理程序中工作(没有,例如,在@catch块) – 2008-10-23 00:13:59
例外情况,您可以使用异常的用户信息字典的NSStackTraceKey成员做到这一点。请参阅Apple网站上的Controlling a Program's Response to Exceptions。
Cocoa已经将未捕获异常的堆栈跟踪记录到控制台,虽然它们只是原始内存地址。如果您需要控制台中的符号信息,则可以使用Apple的sample code。
如果您想在代码中的任意点(并且您在Leopard上)生成堆栈跟踪,请参阅backtrace手册页。在Leopard之前,您实际上必须深入挖掘调用堆栈本身。
显然在iOS 4中可用,但不是3.2。下面是我用,从回溯手册页恬不知耻地复制: 的#include
在HandleException中被调用时,它会自行写回处理函数的跟踪,而[NSException callStackSymbols]会显示引发异常的地方的堆栈。但是,如果用“NSDataArray = [callStackReturnAddresses]; int frames = arr.count; for(i = 0; i
N13的回答didnt相当的工作 - 我修改了它稍微想出这个
#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;
}
}
- 1. OutOfMemoryError的堆栈跟踪未打印到NetBeans控制台
- 2. 如何将堆栈跟踪打印到日志文件中?
- 3. firefox中的控制台日志堆栈跟踪 - 版本54
- 4. 打印堆栈跟踪的JavaScript控制台
- 5. 如何打印堆栈跟踪日志文件中
- 6. JVM日志堆栈跟踪
- 7. 如何在Eclipse插件中打印到Java堆栈跟踪控制台?
- 8. 打印堆栈跟踪
- 9. 打印堆栈跟踪obfusated
- 10. 如何打印StackOverflowException的堆栈跟踪
- 11. 如何打印Groovy堆栈跟踪?
- 12. 日志不打印完整的堆栈跟踪
- 13. Firebug控制台堆栈跟踪
- 14. 打印堆栈跟踪到JavaFX中
- 15. 打印堆栈跟踪到文件
- 16. 如何在Lotus Domino Designer控制台中打印异常堆栈跟踪
- 17. 日志堆栈跟踪的Play应用
- 18. 日志的清理堆栈跟踪
- 19. 打印堆栈跟踪参数的值
- 20. 打印异常的堆栈跟踪
- 21. 如何从Chrome控制台复制堆栈跟踪?
- 22. 如何强制python的VM打印堆栈跟踪?
- 23. 用于将堆栈跟踪参数打印到日志中的PHP函数
- 24. 日志堆栈跟踪并继续
- 25. Android Log.X不打印堆栈跟踪
- 26. Log4j不打印堆栈跟踪
- 27. 在C++(MSVC)打印堆栈跟踪?
- 28. 在Mingw打印堆栈跟踪
- 29. 在JSP中打印堆栈跟踪
- 30. 在arm-linux中打印堆栈跟踪
Mac OS X 10.6中的新功能,当最初提出这个问题时,这并不存在。对于Snow-Leopard之前的版本,使用`backtrace`和`backtrace_symbols`函数;请参阅backtrace(3)联机帮助页。 – 2010-02-25 13:32:30