【swift】Xcodeデバッガ入門
概要
Xcodeデバッガの使い方をまとめました。
デバッガはアプリの不具合の改修に役立ちます。多くの場合、1)ブレイクポイント設定、2)変数の値確認で不具合を改修することができますが、Xcodeが持っている便利な機能を使うとデバッグが捗ります。
Xcodeデバッガの概要
公式ドキュメント(Xcodeの概要: デバッガを使う)に詳しいドキュメントがあります。objective-cベースの記事になっています。
ブレイクポイントの設定
ブレイクポイントを設定すると、プログラムの動作を一時中止し、その時の変数の値やメモリの状態を調べることができます。
Xcodeで行番号付近をクリックすると、ブレイクポイントを設定することができます。
青背景のアイコン表示されるのブレイクポイントが設定されているかどうかがわかります。
ブレイクポイントの使い方
例えば、アプリ開発時にprint出力でデバッグすることがよくありますが、1)loop内のprint出力は量が多くなる、2)消し忘れてリリースしてしまうことがあります。
以下の例は、loopのindexが偶数の場合に値を出力するケースです。
import Foundation var sum = 0 for i in 0..<10 { sum += i if (i % 2) == 0 { print(i) } } print("sum = \(sum)")
Xcodeデバッグ機能を使って、loopのindexが偶数の場合に値を出力きるようになります。
ブレイクポイントを編集します
ブレイクポイントを右クリックし、「Edit Breakpoint ...」を選択します。
ConditionとActionを設定します。
Conditionに、if文の条件部を設定します。
(i % 2) == 0
Actionをクリックし、Log Messageを選択します。変数iの値をメッセージ出力します。
Optionsの「Automatically continue after evaluating actions」にチェックを入れるとブレイクポイントでプログラムが停止しなくなります。これは他のIDEにない、とても便利な機能です。
プログラムを実行すると、以下のような内容が出力されます。
0 2 4 6 8 sum = 45
その他のAction
ブレイクポイントに止まったとき、ログ出力以外の処理も可能です。
デバッグコマンドを実行する
Debugger Commandを選択すると、設定したコマンドを実行してくれます。
変数の値を出力する
以下のコマンドを設定すると変数の値を出力してくれます。eはswiftオブジェクトの評価、poはobjective-cオブジェクトの評価をします。
e sum
(Int) $R1 = 0 (Int) $R4 = 1 (Int) $R7 = 6 (Int) $R10 = 15 (Int) $R13 = 28
poの場合、以下のように出力されます。
po sum
0 1 6 15 28
バックトレースを出力する
Action部に以下を設定するとバックトレースを出力してくれます。
bt -c 10
* thread #1: tid = 0x9323, 0x000000010026cadd HelloConsole`main + 173 at main.swift:13, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1 * frame #0: 0x000000010026cadd HelloConsole`main + 173 at main.swift:13 frame #1: 0x00007fff9c9205ad libdyld.dylib`start + 1 sum = 45
Shell Commandを実行する
DBからデータを取得するシェルスクリプトを書いておけば、ブレイクポイントで止まった時点のデータをチェックすることができます。
音をならす
ActionにSoundを設定すると音を鳴らすことができます。