Hatena::ブログ(Diary)

Windchase

2008.11.20

iPhone デバッグ用のマクロ

iPhone アプリをデバッグするときに、ソースに NSLog をそのまま書いてしまうと、リリース時に削除するのが面倒なので、以下のようなマクロを使っています。

#ifdef DEBUG
#  define LOG(...) NSLog(__VA_ARGS__)
#  define LOG_METHOD NSLog(@"%s", __func__)
#else
#  define LOG(...) ;
#  define LOG_METHOD ;
#endif

使い方は、まずプロジェクトの設定を開き、「Debug」構成を選択してから、一番下のユーザ定義カテゴリの「GCC_PREPROCESSOR_DEFINITIONS」に「DEBUG」を追加しておきます。

f:id:Psychs:20081121155659p:image:w353:h96

こうすることで、Debug build のときにだけ「DEBUG」が定義されます。

あとは、NSLog の代わりに LOG を使うようにすれば ok です。

LOG(@"initialized %@", obj);

また、LOG_METHOD と書くと、Debug build のときだけメソッド名をデバッグログに表示します。

- (void)applicationDidFinishLaunching:(UIApplication*)application
{
  LOG_METHOD;
}

出力:

-[AppController applicationWillFinishLaunching:]

追記 (2008/11/21)

SDK 2.2 向けに更新しました。

追記 (2009/4/23)

NSStringFromSelector(_cmd) ではなく、__func__ を利用するように変更しました。

shachi_kkshachi_kk 2008/11/21 03:38 一応projectFileによってはGCC4.0 macroが無いって時もあるのでそんなときは
http://gyazo.com/d5f5832d33e05434e9c9d852de6f4270.png
みたいにユーザー設定に書いてもokかとー

PsychsPsychs 2008/11/21 05:01 どもです。
Xcode のバージョンによって項目が変わることがあるということですね。

PsychsPsychs 2008/11/21 16:01 SDK 2.2 に合わせて更新しておきました。Thanks!

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。