2010-04-02 54 views
5

运行调试/分发构建检测是否有可能在运行时检测是否正在运行的应用程序与调试或分发编译。如果iPhone在运行时

+0

你为什么要这么做? – progrmr 2010-04-03 00:04:51

回答

13

在项目信息,用于调试配置,添加“调试”的预处理宏(在GCC 4.2 - 预处理部分)。

在你的代码可以使用#ifdef来看看是否DEBUG是,如果你想包括或不包括一些代码的调试版本定义。或者你甚至可以设置一个变量(我不能想象你为什么会想这样):

#ifdef DEBUG 
    BOOL isBuiltDebug = YES; 
#else 
    BOOL isBuiltDebug = NO; 
#endif 

编辑:那么,另一种方法是在预处理宏,即定义一个布尔值:“DEBUG_BUILD = 1“表示调试配置,”DEBUG_BUILD = 0“表示发布配置。然后你就可以在你的代码中使用该值:

if (DEBUG_BUILD) { 
    .... 
} 

只是要小心,不要使用宏的名字,可能的名称匹配的是已经在你的代码或以任何.h文件中,你可能包括两种,因为预处理器将取代它,并且发现这些类型的错误真的很痛苦。

+0

这段代码将成为第三方dist的一部分,如果可能的话,会避免使用#ifdef,但如果没有其他解决方案,可以使用它。 – lolsborn 2010-04-02 17:51:30

+0

我不知道使用预处理器宏以外的其他方法,但是可以避免使用#ifdef,请参阅上面的编辑。 – progrmr 2010-04-03 00:03:12

+0

感谢您的回答! – 2012-04-06 22:53:30

5

而不必考虑如何定义自定义预处理宏,你可以写这样一个自定义的方法:

+ (BOOL) isInDebugMode 
{ 
    #ifndef __OPTIMIZE__ // Debug Mode 
     return YES; 
    #else 
     return NO; 
    #endif 
} 

或者只是那些语句中编写代码内联:

#ifndef __OPTIMIZE__ // Debug Mode 
     // Your debug mode code 
    #else 
     // Your release mode code 
    #endif 

__OPTIMIZE__预处理器设置由编译器自动设置,关于您的项目设置,因此您不必担心它。