Xcode4がリリースされました。久しぶりの大幅なアップグレードです。InterfaceBuilderと統合されて、ユーザーインターフェースもガラッと変わっています。強化された機能もいろいろありますが、今回はその中でブレークポイントを紹介します。
今までデバックする際に、あるメソッドは確実に呼ばれているか? ある時点での変数の値はどうか?
ということを確認するのに、ブレークポイントを設定する方法もありましたが、それだとプログラムの実行がいちいち止まってしまい、デバックの効率が非常に悪くなることがありました。ループ処理の内部に興味がある場合は特にそうです。
そのため、ブレークポイントを設定する代わりにNSLog()をプログラムに挿入して実行し、デバッグが終わったらNSLog()を削除する。などということを行って来ました。
しかし、Xcode4からは一時的なデバックのためにNSLogを使う必要はもうありません。ブレークポイント・アクションの機能が(少しだけ)強化されたからです。
まず、ソースコードの左側をクリックして、ブレークポイントを設定します。

次に、ブレークポイントを右クリック(Control+クリック)して、メニューを開き、「Edit Breakpoint」を選択します。

すると、情報パネルらしきものが開かれるので、そこで「Click to add an action」をクリックしてアクションを追加します。

ここで、Actionに「Log Message」を選択。テキストフィールドに出力するメッセージ”MyView %B (%H) @(NSPoint)[theEvent locationInWindow]@”を入力します。そして、忘れずにOptionsの「Automatically continue after evaluating actions」にチェックを入れます。(これが追加機能です)

最後に「Done」をクリックすれば完了です。
出力するメッセージの文字列では、「%B」がブレークポイントの名前、「%H」がブレークポイントを通過した回数に置き換えられます。また「@...@」で式を書くことができますが、ここにはObjective-Cのメソッド呼び出しを書く事もできます。「(NSPoint)」などと戻り値をキャストすれば、構造体も出力可能です。
今回はNSViewのmouseDown:にブレークポイントを設定した訳ですが、これでプログラムを実行すると、Viewをクリックするたびにコンソールにログが出力されます。

メニューでProduct>Window Behavior>Xcode In Frontを選択しておくと、デバック時のみXcodeがコンソールのみ小さなウインドウに縮小され、常に手前に表示されるようになります。