我目前在我的代碼中的任何地方都使用NSLog來測試它,除了使用標準NSLog之外,還有更好更專業的方法嗎?介意分享其他專業目標-C編碼器在調試時用於記錄日誌的情況嗎?日誌調試目標C代碼時使用哪些日誌記錄解決方案?
1
A
回答
3
這是我的日誌記錄類。它只是NSLog周圍的宏,但它允許你有可切換的級別。我從別人那裏借來修改過這些東西,但不記得在哪裏 - 我希望我能給道具。評論是一個很好的使用指南。希望能幫助到你。
/*
* There are three levels of logging: debug, info and error, and each can be enabled independently
* via the ENLOGGING_LEVEL_DEBUG, ENLOGGING_LEVEL_INFO, and ENLOGGING_LEVEL_ERROR switches below, respectively.
* In addition, ALL logging can be enabled or disabled via the ENLOGGING_ENABLED switch below.
*
* To perform logging, use any of the following function calls in your code:
*
* ENDebug(fmt, …) – will print if ENLOGGING_LEVEL_DEBUG is set on.
* ENInfo(fmt, …) – will print if ENLOGGING_LEVEL_INFO is set on.
* ENHeading(fmt, …) – will print if ENLOGGING_LEVEL_INFO is set on.
* ENError(fmt, …) – will print if ENLOGGING_LEVEL_ERROR is set on.
*
* Each logging entry can optionally automatically include class, method and line information by
* enabling the ENLOGGING_INCLUDE_CODE_LOCATION switch.
*
* Logging functions are implemented here via macros, so disabling logging, either entirely,
* or at a specific level, removes the corresponding log invocations from the compiled code,
* thus completely eliminating both the memory and CPU overhead that the logging calls would add.
*/
#define ENLOGGING_ENABLED 1
// Set any or all of these switches to enable or disable logging at specific levels.
#define ENLOGGING_LEVEL_DEBUG 1
#define ENLOGGING_LEVEL_INFO 1
#define ENLOGGING_LEVEL_ERROR 1
// Set this switch to set whether or not to include class, method and line information in the log entries.
#define ENLOGGING_INCLUDE_CODE_LOCATION 0
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Implementation
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#if !(defined(ENLOGGING_ENABLED) && ENLOGGING_ENABLED)
#undef ENLOGGING_LEVEL_DEBUG
#undef ENLOGGING_LEVEL_INFO
#undef ENLOGGING_LEVEL_ERROR
#endif
// Logging format
#define ENLOG_FORMAT_NO_LOCATION(fmt, lvl, ...) NSLog((@"[%@] " fmt), lvl, ##__VA_ARGS__)
#define ENLOG_FORMAT_WITH_LOCATION(fmt, lvl, ...) NSLog((@"%s [Line %d] [%@] " fmt), __PRETTY_FUNCTION__, __LINE__, lvl, ##__VA_ARGS__)
#if defined(ENLOGGING_INCLUDE_CODE_LOCATION) && ENLOGGING_INCLUDE_CODE_LOCATION
#define ENLOG_FORMAT(fmt, lvl, ...) ENLOG_FORMAT_WITH_LOCATION(fmt, lvl, ##__VA_ARGS__)
#else
#define ENLOG_FORMAT(fmt, lvl, ...) ENLOG_FORMAT_NO_LOCATION(fmt, lvl, ##__VA_ARGS__)
#endif
// Debug level logging
#if defined(ENLOGGING_LEVEL_DEBUG) && ENLOGGING_LEVEL_DEBUG
#define ENDebug(fmt, ...) ENLOG_FORMAT(fmt, @"debug", ##__VA_ARGS__)
#else
#define ENDebug(...)
#endif
// Info level logging
#if defined(ENLOGGING_LEVEL_INFO) && ENLOGGING_LEVEL_INFO
#define ENInfo(fmt, ...) ENLOG_FORMAT(fmt, @"info", ##__VA_ARGS__)
#define ENHeading(fmt, ...) ENLOG_FORMAT(@"#################### " fmt " ####################", @"HD", ##__VA_ARGS__)
#else
#define ENInfo(...)
#define ENHeading(...)
#endif
// Error level logging
#if defined(ENLOGGING_LEVEL_ERROR) && ENLOGGING_LEVEL_ERROR
#define ENError(fmt, ...) ENLOG_FORMAT(fmt, @"***ERROR***", ##__VA_ARGS__)
#else
#define ENError(...)
#endif
#if defined(ENLOGGING_LEVEL_ERROR) && ENLOGGING_LEVEL_ERROR
#define ENResult(result, error) if (result == NO) ENError("%@", error)
#else
#define ENResult(...)
#endif
+0
看起來比#ifdef K_DEBUG更好! –
3
我正在使用標準工具在Xcode
中進行調試,例如,通過向某些行添加斷點並在其停止時查看iVar的值。您還可以使用Instruments
來測試性能和內存管理。
+0
這並不總是那麼好。特別是如果你經常執行代碼,即在遊戲中每幀運行一次的方法。有時將所需數據轉儲到控制檯會更方便。在每個NSLog周圍, – JustSid
相關問題
- 1. PHP日誌解決方案?
- 2. 用於日誌記錄的最佳NoSQL解決方案
- 3. 如何在單元測試目標c代碼時禁用日誌記錄
- 4. Python日誌記錄 - dictConfig - 子模塊的日誌記錄目標
- 5. C++調試Windows上的日誌記錄
- 6. 目標C日誌方法調用
- 7. AWS的日誌記錄/監測解決方案
- 8. 創建日誌記錄系統的最佳解決方案
- 9. 簡單的Swift 3日誌記錄解決方案
- 10. 集中日誌解決方案
- 11. EasyMock日誌記錄調用
- 12. 日誌記錄subprocess.Popen調用
- 13. 禁用Hiera調試日誌記錄
- 14. YII日誌記錄用於調試
- 15. Java日誌記錄:它是日誌還是日誌記錄器?
- 16. Java日誌記錄方法調用?
- 17. 爲解決方案中的多個項目配置日誌記錄
- 18. 使用系統日誌時禁用/啓用日誌記錄
- 19. 調整apache公共日誌記錄的日誌記錄級別?
- 20. 使用Python日誌記錄管理日誌記錄器
- 21. C/C++日誌工具調用取決於日誌級別
- 22. Springframework的ResponseBody的調試日誌記錄
- 23. Theos/Logos調試日誌記錄
- 24. 緊縮調試日誌記錄
- 25. 如何做Javascript調試日誌記錄
- 26. Windows Azure日誌記錄和調試
- 27. Python日誌記錄和Pydev調試器?
- 28. Django調試工具欄日誌記錄
- 29. 解析碼頭日誌記錄
- 30. JVM忽略GC日誌記錄標誌?
呃,一個調試器?像[gdb](http://www.gnu.org/s/gdb/)? –
我認爲他指的是更強大的日誌基礎設施。 Adit,你可能想改變標題,因爲我有相同的初始反應,但是然後閱讀你的最後一行。調試器是顯而易見的,但與NSLog亂碼代碼有問題。有些東西可以在不同的層次上打開和關閉,這是非常有用的。我可以執行某些操作並檢查日誌,但速度比您可以更快一些,但兩者都有明顯的用處。 – bryanmac
對不起,我忘了把它的日誌關鍵字,謝謝指出, – adit