抑制NSLog语句的发布?

时间:2010-04-12 16:04:49

标签: iphone objective-c cocoa xcode

  

可能重复:
  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 alt text

当您使用它时,只需添加(见下文)或某些marco来删除凌乱的#ifdef / #endif标记。

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

4 个答案:

答案 0 :(得分:3)

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

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

查看有关使用-DDEBUG=1DEBUG=1的评论。

答案 1 :(得分:3)

最好的解决方案不是首先使用NSLog,而是依赖于调试器。

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

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

答案 2 :(得分:1)

请查看How to print out the method name and line number and conditionally disable NSLog?的答案。有一些不错的宏可以非常有用。

答案 3 :(得分:1)

我用这个:

-(void)debugWinLog

{

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

}

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

的1或0

正常状态,如果关闭,但在调试时,您可以在终端中随意打开或关闭它。使用正常的默认值写入。 NSlog的声明如下:

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