【发布时间】:2011-07-20 12:05:00
【问题描述】:
当我写东西时,一半的努力往往是添加清晰简洁的调试输出,或者在需要调试时可以启用/禁用的功能。
调试功能 的一个示例是一个下载器类,我可以在其中打开#define 使其“假装”下载文件并将我已经拥有的文件交还给我。这样我就可以测试用户下载文件时会发生什么,而不必每次都等待网络物理抓取文件。这是一个很棒的功能,但是使用#ifdefs 会使代码变得更加混乱。
我最终得到了一堆#defines 之类的
// #define DEBUG_FOOMODULE_FOO
// #define DEBUG_BARMODULE_THINGAMAJIG
// ...
对于我想看的东西没有注释。代码本身类似于
- (void)something
{
#ifdef DEBUG_FOOMODULE_FOO
DebugLog(@"something [x = %@]", x);
#endif
// ...
#ifdef DEBUG_FOOMODULE_MOO
// etc
}
这对于编写/维护代码非常有用,但对代码的外观没有任何作用。
无论如何,人们如何编写轻松的即时长期调试“东西”?
注意:我在这里不仅在谈论 NSLogging...我还在谈论上面的假装下载之类的东西。
【问题讨论】:
-
好奇:在发布版本中留下
NSLog语句有问题吗?它是否会损害性能、填充设备日志或以其他方式提供不良结果? -
Apple 确实提到您应该在发布代码时从代码中删除 NSLog 条目,所以我认为确实如此,是的。 (我实际上找不到这个,但我几乎可以肯定,当我开始编码时,我已经在 developer.apple.com 上的某个地方读过它。)
-
我相信我也记得在某处读过它。可能不是一个坏主意。也许下一个版本的应用程序我会添加宏和搜索/替换。
-
我已经看到在我的应用程序中使用 NSLog 语句的性能受到影响。把它们留在里面确实很痛。
标签: iphone objective-c debugging coding-style code-cleanup