最近、Macのプログラミングを本格的に始めました。
いくつかGUIのアプリのサンプルを作っていると途中途中の動作の理解のために一部分だけ実行したいときがありました。
しかし、GUIアプリだとその辺りの使い勝手が悪い(まだメッセージボックスも出せないレベルだというのもあるのですが)感じです。
ということでちょこちょっことCUIのプログラム方法を調べて作ってみたので作成手順をまとめておきます。
※MacBook Air付属のXcodeでの解説です。
プロジェクトの作成
Xcodeのメニューから「ファイル」-「新規プロジェクト」(もしくはキーボードで Shift+Cmd+N )で新規プロジェクトの作成を行います。
表示されるウィンドウにデフォルトで「Application」が展開されていますがここは無視して(じゃまなのでたたんじゃって下さい)下の方にスクロールします。すると「Command Line Utility」がありますのでこれを展開し、「Foundation Tool」を選択し、「次へ」。
プロジェクト名は適宜、プロジェクトに合った名前を英語で付けてください。とりあえずここでは「sample」としておきましょう。「実行」を押すと新規プロジェクトの作成が開始します。
とりあえず実行
生成後に表示されるウィンドウから「sample.m」を見つけダブルクリックして下さい。
新規作成した状態で既に「Hello World」と表示されるサンプルが記述されいるのでそのまま動かしてみます。
「ビルドして進行」ボタンを押します。
はいっ、一瞬ウィンドウに変化があった後にすぐに終了したかと思います。
「sample.m」をダブルクリックしたウィンドウにある「sample」というファイルをダブルクリックするとターミナルが起動し、動作を確認することができます。しかし、毎回こうするのはあまりに効率悪すぎです。
Xcodeのメニューの「実行」-「コンソール」(もしくはキーボードから Shift+Cmd+R )でコンソールが表示できます。
画面を確認すると既に「Hello World」の出力があります。先ほど実行して一見、何も変更がなかった様ですが実際にはこちらに出力が行われていたということです。
この状態でこのデバッグコンソール、もしくは sample.m のウィンドウの「ビルドして進行」ボタンを押します。
そうするとコンソール上に出力結果が表示され、しっかりと「Hello World」と表示されているのが確認できます。
標準出力に出力する
ヘルプでNSLogを確認したところ「NSLog Logs error an message to stderr.」と有り。標準エラーへの出力に「Hello World」と出力される様です。
エラーに出力するのも何なので標準出力に出力するように書き換えます。
sample.m の以下の部分を
NSLog(@"Hello, World!");
printfに置き換えます(Objective-CはC言語と互換性があるためこのような記述が使えます)。
printf("test");
これで立派にprintfデバッグができるようになりました。
※えっ、printfデバッグなんか使わずにブレークポイントやtraceを使え?それも分かるけどprintfデバッグがやりたいときもあるのよ人間だもの。