Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何声明仅调试语句_Objective C_Xcode - Fatal编程技术网

Objective c 如何声明仅调试语句

Objective c 如何声明仅调试语句,objective-c,xcode,Objective C,Xcode,在C#中,我可以使用以下代码来生成只在调试构建期间执行的代码,如何在Xcode中执行相同的操作 #if DEBUG { // etc etc } #endif 你可以用 #ifdef DEBUG .... #endif 您需要在调试配置的设置中将DEBUG=1添加到项目的预处理器符号定义中,因为Xcode不会自动为您完成此操作 我个人更喜欢执行DEBUG=1而不是检查NDEBUG=0,因为后者意味着默认的构建配置包含调试信息,然后必须显式关闭这些信息,而“DEBUG=1”意味

在C#中,我可以使用以下代码来生成只在调试构建期间执行的代码,如何在Xcode中执行相同的操作

#if DEBUG
{
    // etc etc
}
#endif
你可以用

#ifdef DEBUG
    ....
#endif
您需要在调试配置的设置中将
DEBUG=1
添加到项目的预处理器符号定义中,因为Xcode不会自动为您完成此操作


我个人更喜欢执行
DEBUG=1
而不是检查
NDEBUG=0
,因为后者意味着默认的构建配置包含调试信息,然后必须显式关闭这些信息,而“DEBUG=1”意味着只启用调试代码。

应该为已经处于发布模式的版本定义NDEBUG符号

#ifndef NDEBUG
/* Debug only code */    
#endif 

通过使用NDEBUG,您可以避免为调试构建自己为编译器指定-D调试参数,这是一个非常有用的调试技术说明:技术说明TN2124 Mac OS X调试魔术 它包含了很多用于调试应用程序的有用内容

Tony

调试现在默认在“项目/预处理器宏”下的“调试模式”中定义。所以除非你有一个非常老的项目,否则测试它总是有效的

然而,我讨厌这样一个事实:它会弄乱代码缩进,而且不是特别紧凑。这就是为什么我使用另一个宏,使生活更容易

#ifdef DEBUG
#define DEBUGMODE YES
#else
#define DEBUGMODE NO
#endif
因此,测试DEBUGMODE值要紧凑得多:

if (DEBUGMODE) {
//do this
} else {
//do that
}
我最喜欢的:

NSTimeInterval updateInterval = DEBUGMODE?60:3600; 

但是您仍然必须将NDEBUG添加到编译器设置中才能使用发布模式。许多程序员更喜欢ifdef-DEBUG,而不是ifndef-NDEBUG中的双重否定。我得到了很多人喜欢的结果,但是发布的NDEBUG是C标准。坚持下去,你就不会有麻烦了。NEDBUG也应该在Xcode发布版本中为您定义。很抱歉,默认情况下,Xcode似乎没有定义它。这里是您应该添加它的地方:另外,如果他想将assert()的行为与自己的调试代码分离,该怎么办?当然,如果他希望自己控制自己,他需要做出一个简洁的决定并相应地定义。这似乎是XCode实现者没有像VS和其他人那样提供一些默认定义的基本原理。我只是觉得他应该从standard.Yup开始,现在看起来这是默认定义的——我刚刚在Xcode中创建了一个标准的iOS项目,并在项目构建设置的预处理器宏/调试部分获得了DEBUG=1预设值。