我想在某些時間點記錄呼叫跟蹤,如失敗的斷言或未捕獲的異常。如何打印堆棧跟蹤到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