【问题标题】:Suppressing NSLog statements for release? [duplicate]禁止发布 NSLog 语句? [复制]
【发布时间】:2011-02-07 02:01:04
【问题描述】:

可能重复:
Do I need to disable NSLog before release Application?

我想知道是否有人可以帮助我设置一些 NSLog 语句,以便它们在“调试模式”下执行时打印到控制台,但在“发布模式”下不打印。我知道我需要在 Xcode 的调试配置中添加类似 DEBUG = 1 的内容,但我找不到在哪里。另外我如何在我的代码中使用它?

NSLog(@"Print Always");
if(DEBUG) NSLog(@"Print only in debug");

有简单的方法吗?

EDIT_001: 我尝试关注this,但现在这些键似乎只列在“所有设置”下,并且显示为好听的名称。我应该使用的是GCC_PREPROCESSOR_DEFINITIONS,所以我需要找到“预处理器宏”,选择编辑并添加DEBUG=1

当您开始使用它时,只需添加(见下文)或一些 marco 以删除凌乱的 #ifdef / #endif 标签。

NSLog(@"You always see me?");
#ifdef DEBUG
NSLog(@"Only in DEBUG");
#endif

【问题讨论】:

标签: iphone objective-c cocoa xcode


【解决方案1】:

这是一个流行的解决方案:

http://iphoneincubator.com/blog/debugging/the-evolution-of-a-replacement-for-nslog

请参阅 cmets 了解如何使用 -DDEBUG=1DEBUG=1

【讨论】:

  • 我看过了,但添加 OTHER_CFLAGS 时出错(见上文)
  • 好的排序,见上面的编辑,也感谢链接,它确实帮助我走上了正确的轨道。
【解决方案2】:

最好的解决方案不是一开始就使用 NSLog,而是依赖调试器。

您可以设置执行调试器命令的断点以打印出任何内容,并且您可以设置断点以执行调试器命令但不停止执行。在实践中,这就像 NSLog 一样工作。

通过使用调试器进行日志记录,您不必担心删除日志语句。

【讨论】:

  • 我可以理解这一点,而且我经常使用调试器,但我确实喜欢在开发时将输出放到控制台中,我并不总是想把所有这些都去掉发布,特别是因为它们可能对开发未来的升级有用。
【解决方案3】:

请看How to print out the method name and line number and conditionally disable NSLog?的答案。里面有一些非常有用的宏。

【讨论】:

    【解决方案4】:

    我用这个:

    -(void)debugWinLog
    

    {

    NSUserDefaults * defaultsDebug = [NSUserDefaults standardUserDefaults];
    theDebugWin = [defaultsDebug boolForKey:@"logger"];
    

    }

    在 awakeFromNib 中调用。 它检查应用程序 plist 文件中 1 或 0 的 BOOL 条目“logger”

    关闭为正常状态,调试时可以在终端随意开启或关闭。使用正常的默认值写入。 NSlog 语句如下所示:

    if ( theDebugWin) {NSLog (@"%@", windowState );}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-29
      • 1970-01-01
      相关资源
      最近更新 更多