1. 程式人生 > >[除錯相關]預編譯檔案中巨集定義列印日誌

[除錯相關]預編譯檔案中巨集定義列印日誌

  1. #ifdef DEBUG
  2. #define debugLog(...) NSLog(__VA_ARGS__)
  3. #define debugMethod() NSLog(@"%s", __func__)
  4. #else
  5. #define debugLog(...)
  6. #define debugMethod()
  7. #endif

工程有Debug Version和Release Version,Debug Version是程式開發過程中版本,它包含了所有除錯資訊,一些常用的NSLog列印日誌,在程式除錯過程工根據我們設定的除錯資訊可以看出什麼地方出錯,我們在執行執行一個小程式的時候,會不會首先就想到進行斷點除錯呢,應該是首先想著NSLog一下,看看哪個函式方法沒執行,看看是不是哪個陣列的值沒取出來。Release Version是釋出版本,不列印NSLog可以加快程式執行速度,減少記憶體使用。   但是到一個大工程中,會有很多很多這樣的NSLog,在我們工程完美執行的時候,釋出Release 版本的時候,難道我們去一行行的註釋調NSLog嗎?假如工程現在原來基礎上釋出一個version 1.2版本的,我們在修改程式的時候豈不是還把原來註釋給取消,那就很麻煩很麻煩了。

所以,此處用到了巨集指令

上段程式碼的意思就是 用巨集指令做一個判斷,如果DEBUG為真,則編譯#ifdef到#endif巨集定義,否則編譯器就不編譯;

這個DEBUG在哪設定呢,

在 "Target > Build Settings > Preprocessor Macros > Debug" 裡有一個"DEBUG=1"。

現在我們來做一個測試:

取一個巨集指令放到OSAppDelegate.m的application:didFinishLaunchingWithOptions:方法中,並用同一個NSLog做一個對比;

NSLog(@"%s", __func__);

debugMethod();

首先設定為Debug模式下,Product-->Edit Scheme


跳轉到這個介面


當我設定Build Configuration成Debug時,打印效果圖


當我設定Build Configuration成Release的,列印時效果圖


當Run  Test  Profile  Analyze  Archive的時候,都可以根據需要設定Debug和Release兩個模式執行;

所以我們完全可以用一個巨集指令來設定是否列印除錯資訊;