クライアントエンジニアの子安です。
Cocos2d-x というフレームワークを使って C++ で Xcode 上でアプリ開発をしています。
今回は Xcode のブレークポイントの機能とそれに関連した機能をいくつか紹介して、こんなこともできるんだと思ってもらえればと思います。
なお、Xcode のバージョンは 8.3.1 です。

今回紹介するやつ

  • ブレーク中の基本的な機能
    • Console で vector の要素を見るときはちょっとやっかい
  • 止まらないブレークポイント
    • “Action” を設定してみよう
    • ログ出力できるよ

ブレーク中の基本的な機能

ブレークポイントで処理を止めている時の基本的な機能についてです。
画面下のウィンドウ(”Debug Area” って呼びます)の左側部分(”Variables View” って呼びます)にて、処理が止まっている場所のスコープで参照できる変数が並んでいます。

クリックしていくとクラス内部のメンバ変数等も見れます。
この時 Variables View の右隣のウィンドウ(”Console” って呼びます)では、参照できる変数の値を見たり、変更したりすることができます。

画像のレイアウト調整するときに使うと、ビルドし直さずに済むので、便利ですね。

Console で vector の要素を見るときはちょっとやっかい

簡単に変数の中身を見れる Console ですが、vector の要素を見るのはちょっとやっかいです。(要素数が少ないときはいいんですけどねぇ)

画像のようにp vector.at(i)では中身を見ることができません。
vector の定義を追っていくとその答えが見つかります。

結局は定義している内部変数でないと見れないので(p vector.__begin_[100])と打つと vector の 100 番目の要素を見ることができます

止まらないブレークポイント

ブレークポイントなのにブレークしないとは……。
ブレークポイントを右クリックすると “Edit BreakPoint…” が出てくるので、それを選択しましょう。

“Condition” とか “Ignore” とかありますが、一番下の “Options” にチェックを入れて見ましょう。

“Automatically continue after evaluating actions” とある通り、”actions” をした後、自動で処理を再開させます。
これがブレークしないブレークポイントの正体です。

では “actions” ってなんだ?ってことなんですけど、これは “Options” の上にある “Action” のことです。
“Action” を設定せずに “Options” をチェックすると “Action” が何もないので、ブレークポイントとしては何もせずにただ処理を一旦止めて、再開させているだけの状態になります。

“Action” を設定してみよう

“Add Action” のボタンをクリックして “Debugger Command” を設定します。

出てきた input box にレイアウト調整の例の時に入力したコマンドを入力して実行すると、いちいちブレークポイントで止まらずに調整ができます。

調整した値が見当違いな値だったとしても、再ビルドせずに、コマンドの値を変えて、もう一度ブレークポイントを設定したところを実行させるだけで調整が反映されます。

ブレークポイントなんだけどログ出力もできるよ

Action の種類は “Debugger Command” の他にもあって “Log Message” というのもあります。
input box に文字列を入れるとそのブレークポイントを通った時に Console にログが出力されます。
@exp@ = expressionとあるように、スコープ内で参照できる変数を “@” で囲むと、その変数を評価し、ログ出力されます。
“@” で囲む中身を Console で入力したものにすれば、vector の特定の要素や、クラス内の変数の表示もできます。

先ほど紹介した “Options” と組み合わせると、print デバッグと同じことをできます。
コードの変更をせずにできるので、ビルドし直す必要もなく、無駄なログをコードに残す心配もありません。

まとめ

Xcode のブレークポイントの機能のほんの一部を説明して、Debug Area についても少し機能を使って見ました。
まだまだブレークポイントの機能はたくさんあるので、遊んでみてはいかがでしょうか。