2010-04-02 48 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__預處理器設置由編譯器自動設置,關於您的項目設置,因此您不必擔心它。