iphone - 避免代码中的调试内容困惑

标签 iphone objective-c debugging coding-style code-cleanup

当我写东西时,一半的努力倾向于添加清晰简洁的调试输出,或者在需要调试时可以启用/禁用的功能

调试功能 的一个示例是下载器类,我可以在其中打开#define,使其“假装”下载文件并简单地把我已经拥有的文件还给我。这样我就可以测试看看当用户下载文件时会发生什么,而不必每次都等待网络物理抓取文件。这是一个很棒的功能,但代码因 #ifdefs 而变得更加困惑。

我最终得到了一堆 #define 之类的

// #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...我还在谈论类似上面的假装下载的东西。

最佳答案

在编写自己的库之前,我阅读了几个库并看到了两种方法:宏 + C 函数 ( NSLogger ) 或宏 + 单例 ( GTMLogger , Cocoa Lumberjack )。

我写了我天真的实现 here使用宏+单例。我在运行时这样做:

[Logger singleton].logThreshold = kDebug;
trace(@"hi %@",@"world); // won't show
debug(@"hi %@",@"world);

您可以对包而不是日志级别执行相同的操作。如果我想让它消失,我会更改#defines。这是涉及的代码:

#define trace(args...) [[Logger singleton] debugWithLevel:kTrace line:__LINE__ funcName:__PRETTY_FUNCTION__ message:args];

if (level>=logThreshold){
  // ...
} 

如果您想更深入地了解 Lumberjack,它有一个注册类工具来切换某些类的日志记录。

关于iphone - 避免代码中的调试内容困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6761603/

相关文章:

ios - UIDatePicker 最小日期

ios - iOS UIButton 背景边框问题

c - 什么是 .dbg 文件以及它们与 gcc 中的 `-g` 选项有什么关系

python - 如何添加 Python 对象的自定义 Visual Studio 调试 View ?

iphone - 当蓝牙连接到我的 iPhone 时唤醒应用程序?

iphone - CLLocationCooperative2D 到 CLLocation

ios - 是否有可能将浮点值存储到 id?

perl - 了解开发::泄漏

ios - 错误: The Info. plist in package must contain the CFBundleIdentifier key

iphone - 在开头呈现模态视图