*

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プログラミングのキモ(AppDelegate説明 デバッグをやりやすくするための工夫:NSSetUncaughtExceptionHandler )

デバッグはプログラミングを進めていく上で避ける事が出来ません。どうしてもバグは入ってきます。重要なの

記事を読む

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

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

記事を読む

iOSプログラミングのキモ(AppDelegate説明 iPhone5以降とiPhone4S以前を画面サイズで判別する )

iPhone5以降 画面サイズが2パターン(iPhone6ではさらに増えるかも・・(^^;))になっ

記事を読む

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

久々に、プログラミングの話です(^^; 今日は 機能が複雑な画面を 複数のViewContro

記事を読む

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

このブログでも度々書いてきたFileQ iOS版ですが、今月末に Appleに申請できそうな

記事を読む

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

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

記事を読む

iOSプログラミングのキモ(MainViewController説明 : dispatch_asyncとブロック構文を使った 今どきのお手軽マルチスレッドプログラミング)

TwitterやYouTubeといったサービスでは、コンテンツの見出しにサムネイルが付加されることが

記事を読む

iOSプログラミングのキモ(2:ソースコード概説 )XCode

iOSプログラミングでは Appleが提供している XCodeという開発ツールを使います。

記事を読む

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

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

記事を読む

iOSプログラミングのキモ(AppDelegate説明 NSUserDefaultsに設定情報を格納する )

QTubeは、YouTubeを閲覧するときに 国別コードを設定しています。国別コードは iOSに設定

記事を読む

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 ↑