*

iOSプログラミングのキモ(デバッグをやりやすくするための工夫:コンソール・ログの出し方 )

公開日: : 最終更新日:2014/01/21 Apple, iOS, iPad, iPhone, XCode

iOS上でプログラミングをする時、ログ出力用の関数としてNSLogという関数をよく使います。NSLogだけでも悪くないのですが もっと使い勝手のいいコンソール・ログ出力マクロを紹介します。

Debug.h

#ifdef DEBUG
#define LOG(fmt, ...) \
NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
#define LOG(...)
#endif

上記のマクロは、ログを出力した クラス名、メソッド名、行番号を 付加して コンソールに出力します。

使い方の例です

LOG(@"self.isRetina4 = %@", self.isRetina4 ? @"YES":@"NO");

ログとして出力されると、こうなります。

2014-01-21 11:02:32.835 QTube[39304:70b] -[AppDelegate application:didFinishLaunchingWithOptions:] [Line 148] self.isRetina4 = YES

デバッグの際には あちこちに ログ出力の関数を仕込んで 動作確認をすることになるのでコンソールにはあちこちに埋め込んだログが一緒くたに表示されます。そのため どこに仕込んだログかわかりづらいことがよくあります。このマクロはクラス、メソッド、行番号を自動的に付加することで、ログを見やすくさせています。

実際のログの出力例です、QTube起動直後のログの一部です、横スクロールさせて全体を見てください。

2014-01-20 09:08:51.999 QTube[10540:70b] +[NSManagedObjectContext(MagicalRecord) MR_contextWithStoreCoordinator:](0x8a60ac) -> Created Context UNNAMED
2014-01-20 09:08:52.001 QTube[10540:70b] +[NSManagedObjectContext(MagicalRecord) MR_setRootSavingContext:](0x8a60ac) Set Root Saving Context: <NSManagedObjectContext: 0xb84c920>
2014-01-20 09:08:52.002 QTube[10540:70b] +[NSManagedObjectContext(MagicalRecord) MR_newMainQueueContext](0x8a60ac) Created Main Queue Context: <NSManagedObjectContext: 0xb628a70>
2014-01-20 09:08:52.002 QTube[10540:70b] +[NSManagedObjectContext(MagicalRecord) MR_setDefaultContext:](0x8a60ac) Set Default Context: <NSManagedObjectContext: 0xb628a70>
2014-01-20 09:08:52.004 QTube[10540:70b] -[AppDelegate loadCountrySettingList] [Line 325] AppDelegate#loadCountrySettingList [mutableFetchResults count]=0
2014-01-20 09:08:52.007 QTube[10540:70b] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0xb628a70) → Saving <NSManagedObjectContext (0xb628a70): *** DEFAULT ***> on *** MAIN THREAD ***
2014-01-20 09:08:52.029 QTube[10540:70b] -[AppDelegate application:didFinishLaunchingWithOptions:] [Line 142] self.window.frame = {{0, 0}, {320, 568}}
2014-01-20 09:08:52.030 QTube[10540:70b] -[AppDelegate application:didFinishLaunchingWithOptions:] [Line 148] self.isRetina4 = YES
2014-01-20 09:08:52.121 QTube[10540:70b] -[MainViewController gdataLoad] [Line 481] urlStr=https://gdata.youtube.com/feeds/api/standardfeeds/US/top_rated?alt=json&orderby=published&start-index=1&max-results=50&time=today
2014-01-20 09:08:52.165 QTube[10540:70b] -[AppDelegate applicationDidBecomeActive:] [Line 260] application.description=<UIApplication: 0xb7412c0>
2014-01-20 09:08:52.165 QTube[10540:70b] -[VideoDownloadManager applicationDidBecomeActiveNotificationReceiver:] [Line 178] notification.description=NSConcreteNotification 0xb869ed0 {name = APPLICATION_DID_BECOME_ACTIVE_NOTIFICATION}
2014-01-20 09:08:52.193 QTube[10540:6917] iRate is checking http://itunes.apple.com/US/lookup?bundleId=com.lisonal.QTube to retrieve the App Store details...
2014-01-20 09:08:52.193 QTube[10540:70b] iRate did not prompt for rating because the app was first used less than 2 days ago
2014-01-20 09:08:52.196 QTube[10540:70b] -[MainViewController viewDidAppear:] [Line 278] self.navigationController.navigationBar.frame={{0, 20}, {320, 44}}
2014-01-20 09:08:52.196 QTube[10540:70b] -[MainViewController viewDidAppear:] [Line 279] trimY_=40.000000 self.view.frame={{0, 64}, {320, 455}}

パッと見、とてもゴチャゴチャしてますね、実際 DEBUG時には このログを目で追いながら 不具合の箇所を絞り込んでいくことになります。その時 クラス名、メソッド名、行番号があると とても作業が進めやすいのです。効率的にDEBUGを進めるためにぜひ取り入れてみてください。

関連記事

iOSプログラミングのキモ(2:ソースコード概説 )主要なObjective-Cソース・ファイル一覧

QTubeの主要Objective-Cのソース一覧です。 iOSでは アプリを作る場合 Objec

記事を読む

iOSプログラミングのキモ(Delegate iOSプログラミングで避けて通れないしくみ)

Delegate(委任)の考え方を説明します。iOSのプログラミングでは このDelegateが頻繁

記事を読む

iOSプログラミングのキモ(サードパーティ製ライブラリをサクッと入れるcocoapods)

iOSプログラミングでは 便利なライブラリがたくさんあります。特にUI系のライブラリは豊富で自分で作

記事を読む

iOSプログラミングのキモ(複雑な画面を複数のViewControllerで制御する その2)

先週は、複数のViewControllerで1つの画面を構成する話のうち、親ViewControll

記事を読む

FileQ iOS版を開発しようと思った理由

私の会社では FileQというファイル転送サービスを 2008年3月末から始めています、かれこれ6年

記事を読む

iOSプログラミングのキモ(デバッグをやりやすくするための工夫:Debug.hのインクルード )

前回 紹介した Debug.h は、使う際 以下のようにソースファイル(ここでは拡張子が m のもの

記事を読む

iOSプログラミングのキモ(行き当たりばったりなプログラミングでも、何とか形にするために守っていること その2)

先週に引き続き、今週も文字中心のエントリーです、今回は 下記3つのことを書いていきます。 M

記事を読む

iOSプログラミングのキモ(2:AppDelegate説明 )

実際の AppDelegate.h、AppDelegate.m のソースコードです AppDe

記事を読む

iPhoneが7GBの転送制限に引っかかりそうになって Nexus7(2013)LTE版のテザリング機能が大活躍

皆さんは スマホを使ってて、転送制限に引っかかったことはありますか?私はあります(笑) 最

記事を読む

iOSプログラミングのキモ(iOS7から使えるようになったマルチタスク機能、NSURLSessionはこう使え!)

今日はQTubeのソースに関する話題ではなく、現在開発中のアプリで使っているNSURLSession

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

FileQ Hosting 月額99円 容量1GB


サイト管理 Mezzanine
Django上で動くCMS Mezzanine 用のモジュールを作ってみる その1

Django上で動くCMS Mezzanine上で動く、モジュールを作

ホーム Mezzanine
Django上で動くCMS Mezzanine を インストールする MacOSX Yesemite 編

Mezzanineは Django WEBフレームワーク上で動くCMS

EclipseにGWT(Google Web Toolkit) Plugin for Eclipseを入れようとしてハマった

最近PHPでちょっとした業務システムを作りました。業務システムの特徴と

ブログを半年やった成果を Google Analytics から眺める

今年の1月からブログを書き始め、そろそろ半年が経とうとしています。

母校で特別 講義をやってきました。

少し 間が空いてしまいました(^_^;) ちょっと前になりますが

→もっと見る

mautic is open source marketing automation
PAGE TOP ↑