日志debugging目标C代码时使用什么日志logging解决scheme?

我目前在我的代码中的每一处都使用NSLog来testing它,除了使用标准的NSLog之外,还有更好更专业的方法吗? 介意分享其他专业目标-c编码器在debugging时使用的日志loggingfunction吗?

这是我的日志logging类。 它只是macrosNSLog周围,但它可以让你有可切换的水平。 我从别人那里借来修改过这个东西,但是不记得在哪里 – 我希望能给道具。 评论是一个很好的使用指南。 希望能帮助到你。

/* * 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 

我正在使用标准工具在Xcode中进行debugging,例如,通过向某些行添加断点并在停止时查看iVar的值。 您也可以使用Instruments来testing性能和内存pipe理。