iOS アプリのデバッグ術 ~値の出力と代入~

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

便利な 2 つの LLDB コマンド

デバッグ時に覚えておくと便利な、以下 2 つのコマンドを紹介します。

  • po
  • expression

知ってる人は知っている。知らない人は覚えてね。
本記事はどちらかと言うと知らない人向けのシンプルなものです。

サンプルアプリ

デバッグ用にこんなアプリを作ってみました。

1

class ViewController: UIViewController {

    @IBOutlet weak var label: UILabel!
    var isOk = false

    override func viewDidLoad() {
        super.viewDidLoad()
        judgment()
    }

    @IBAction func refresh(_ sender: Any) {
        judgment()
    }

    private func judgment() {
        let text = isOk ? "OK" : "NG"
        label.text = text
    }
}

Bool 型のフラグ変数 isOk によって画面に表示する文字列が変わるというアプリです。(フラグのデフォルト値は false
フラグの判定処理は起動時と画面右上の更新ボタンタップ時に実行されます。
このサンプルを利用し、説明します。

po

コマンド po は print object の略で、オブジェクトの値を出力するコマンドです。
上記サンプルコードの 16 行目にブレークポイントを設定し、処理を止めます。
この時デバッグエリアで po <式> と入力することで、その式の中身を表示することができます。

2

po isOk という入力で変数 isOk の値 false が確認できます。

3

また、1 行ステップオーバーしてから po text と入力すると、その中身が NG という文字列であることもわかります。
値の確認はよく行う作業なので、このコマンドは確実に覚えておきましょう。

expression

コマンド expression は後に続く式を評価するコマンドです。
こちらは expression <式> = <値> と入力することで、その式に値を代入することができます。

4

ここでは上記サンプルコードの 16 行目で expression isOk = true と入力し、isOk の値を true に書き換えています。
続いてコマンド po isOk で isOk の値が true になっていることが確認できます。

5

これにより、次の行で text の値が OK に設定されることも確認できます。

6

画面も更新されました。

まとめ

  • 値の出力:po <式>
  • 値の代入:expression <式> = <値>

シンプルですが、非常に強力なデバッグコマンドです。
アプリ開発の際は積極的に使っていきましょう。

関連サイト