Xcodeデバッグ入門〜「バグは友達!怖くない」を目指して〜

2021.06.04

アプリ開発に置いてデバッグ作業は必要不可欠な存在ですが、個人ではいわゆるprint()のような手段でしかデバッグをやってこなかったので、Xcodeのデバッグ機能について理解を深める為に調べることにしました。

対象

「デバッグって誰?サッカー選手? 」という方や、Xcodeのデバッグ機能を触ったことがない初心者でバグと友達になりたい方

環境

  • Xcode 12.5
  • Swift 5.4

デバッグとは

プログラムや機械に潜む欠陥・不具合(バグ = Bug)を発見して除去・修正し、本来の設計通り正常に動作させるために実施される作業のこと。

英語の辞書でも、

【de - (除去)+ bug】 コンピューターのバグを発見し、修正する

デバッグエリア

Xcodeのデバッグエリアは、Debug barConsoleVariables viewで構成されます。

こちらのApple Developer公式ページに詳細なdebugging toolについての説明があります。

デバッグエリアは、 command + Shift + Y で表示/非表示を切り替えることができます。

今回はXcodeでデバッグする上で必要なブレイクポイントについて調べてみました。

ブレイクポイントとは

実行中のプログラムを意図的に一時停止させる箇所で、停止後、実行環境を観察し、プログラムが期待通りに機能しているかどうかを判断することができる。

ブレイクポイントを実際に使ってみる

ブレイクポイントを有効/無効の切り替え

対象の行番号(ブレイクポイント)をクリックすると、有効/無効を切り替えられます。

もし、行番号が表示されていない場合は、 メニュー Xcode -> Preferences… -> Text Editing -> Show: □ Line numbers にチェックすることで行番号が表示されます。

ブレイクポイントの移動

追加したブレイクポイントをドラッグ&ドロップで別の行に移動させることができます。

ブレイクポイントの削除

ブレイクポイントを削除したい場合は、ドラッグしてソースエディター外にドロップすると消えます。また、ブレイクポイント上で右クリックを押すと、メニューが表示されるのでDelete Breakpointを選択することでも削除することができます。

ショートカットキーで追加/削除を切り替え

ブレイクポイントを追加したい(又は削除したい)行が選択された状態で command + option + ¥ を使うと、ブレイクポイントの追加/削除を切り替えることができます。

ブレイクポイントの一括削除

プロジェクト内またはファイル上のブレイクポイントをまとめて削除したい場合は、Breakpoint navigater上で右クリックし、表示されたメニューのDelete Breakpointsを押すことで全てのブレイクポイントを削除できます。

プログラムを実際に止めてみる

ブレイクポイントを追加してプログラムを実行すると、ブレイクポイントがある行で止まってくれました。

一つ注意しておきたいのは、ブレイクポイントで止まった行の処理はまだ実行されていません。

なので、まだコンソール上にHi,My name is captain Debugが出力されていません。

poコマンドで現在の値を調べる

ブレイクポイントで一旦停止させると、コンソール上でpoコマンドを使用することで現在のオブジェクトや変数の値を調べることができます。

po 調べたい値

今回は例として変数healthの値を調べてみました。

コンソール上にもCaptainDebug.Health.goodと表示されて、インスタンス変数として定義した通りの値が出力されています。

expressionコマンドで別の値を代入する

expressionコマンドを使用することで既存の変数に別の値を代入することができます。

expression 式

expression health = Health.badを代入した後に、poコマンドで値を確認すると、変更されたのが確認できました。

コンソール上の変更を実際にアプリに反映してみる

普通に起動させると、このような画面が表示されるアプリです。

ブレイクポイントを追加して、コンソール上で変数healthの値をHealth.badに変更してプログラムを再開させてみましょう。

ソースエディター上では何の変更も加えていませんが、シュミレーター上で体調が悪そうなCaptain Debugの画像に表示が変わりました。

Debag barのボタンについて

Debug bar上のこちらのボタンについて説明します。

名称と動作

左から順に

  • Breakpoint Activation ブレイクポイントの有効・無効を切り替える
  • Continue/Pause プログラムの再開/停止
    • ショートカットキー command + control + Y でも同じ操作が行えます。
  • Step over 1行ずつプログラムを実行する
    • ショートカットキー F6 でも同じ操作が行えます。
  • Step in 停止位置の関数に入る
    • ショートカットキー F7 でも同じ操作が行えます。
  • Step out 関数の外に出る
    • ショートカットキー F8 でも同じ操作が行えます。

Debug View Hierarchy

Debug View Hierarchyボタンを押すと、現在のViewがどのような階層になっているかを確認することができます。

おわりに

エラー発生時やアプリの保守改修作業にはデバッグは必要不可欠ですが、既存プログラムの流れを知る際にもとても助かりました。 「バグと大親友」とまではいきませんが、デバッグ機能を使い少しは仲良くなれそうな気がします。

まだまだXcodeのデバッグ機能は奥が深いので引き続き学んで行きたいです。

参考