LoginSignup
14
19

More than 3 years have passed since last update.

Swift プログラムのデバッグテクニック - ブレイクポイント、ランタイム変数検査

Last updated at Posted at 2020-05-23

この記事では、一般的なバグ修正方法をいくつかご紹介します。

一般的なデバッグ手法

print, print, print...

Printステートメントは常に役に立ちます。それにより、プログラムのランタイム中に変数を出力できます。

func dailyRoutine(){
    print(myCats)
    myCats.forEach { (cat) in
        print("猫の名前は\(cat.name)です。")
        cat.feed()
        cat.hug()
    }
}

ブレークポイント

行番号をクリックしてブレークポイントを Xcode に設定できます。プログラムは、シミュレーターか接続したiOSデバイス上で実行しているとき、ブレークポイントに到達すると停止します。ブレークポイントには以下のようないくつもの種類があります。

通常のブレークポイント

通常のブレークポイントを作成するには、Xcode のコード行の行番号をクリックします:

ezgif-2-df0a16ddb28f.gif

プログラムが停止すると以下のようになります:

Screen Shot 2020-05-23 at 16.56.08.png

条件付きブレークポイント

条件付きブレークポイントは、ある特定の条件を満たした場合にのみコードを停止させます。例えば、ネコの名前が "ネコノヒー" : の場合にのみ、プログラムの実行を停止させたいならば

ezgif-2-ded322b7d123.gif

Screen Shot 2020-05-23 at 16.50.39.png

  1. 通常のブレークポイントの作成
  2. 青ラベルをダブルクリックする
  3. 条件フィールドに条件を入力する。ここでは cat.name == "ネコノヒー" と入力しました。

表示変数

ブレークポイントに来たらアクションを実行して、プログラムを停止しないこともできます。

print(cat.name)

上記コードは次のように置き替えることもできます。

ezgif-2-3a86395ceed2.gif

Screen Shot 2020-05-23 at 16.49.47.png

  1. 通常のブレークポイントを作る
  2. Add Action ボタンをクリックする
  3. po cat.name などのアクションを入力する。po がどのようなものであるかについては、次のパートで取り上げます。
  4. トグルスイッチを、評価アクション後に自動的に継続するオプションに合わせる Automatically continue after evaluating actions

ブレークポイントに来てもプログラムは停止せず、猫の名前がコンソールに表示されます。

Screen Shot 2020-05-23 at 16.57.56.png

Xcodeが組み込まれたランタイムデバッガ (po)

ブレークポイントでプログラムが停止した時は (通常のブレークポイント)、変数の値を調べて、変数値を変えて下さい。

例えばここにブレークポイントを置くことができます。

Screen Shot 2020-05-23 at 16.54.52.png

ブレークポイントでプログラムが停止した時は、コンソールウィンドウで命令を実行できます。

変数を調べることができます。

ここでは、po は表示オブジェクトにあたります。

po myCats

ezgif-2-5c651f6b6d79.gif

po myCats.count

ezgif-2-4a6e311fe684.gif

po myCats.first?.name

ezgif-2-4f432462041b.gif

変数を変更することも可能です

po myCats.count //2
po myCats.append(.init())
po myCats.count //3

ezgif-2-74bf7e847d7a.gif

Xcode オーガナイザー

App Storeで既にプログラムが公開されていれば、Appleがクラッシュの情報を集めてくれます。

Xcode のトップメニューで、"Window"と"Organizer"をクリックしてください。

Screen Shot 2020-05-23 at 17.10.37.png

左側でApp Storeで既に公開しているアプリケーションをクリックして、トップの"Crashes"をクリックしてください。

Screen Shot 2020-05-23 at 17.12.09.png

App Storeにある私のアプリで起きた実際のクラッシュに関するレポートをシェアしたいと思います。この問題はすでに解決済みです。

まずはバージョンのドロップダウンメニューをクリックしてバージョンを選択してください。

Screen Shot 2020-05-23 at 17.14.16.png

実際に起きたソフトウェアのクラッシュのリストが表示されるかと思います。そのうちの1つをクリックして詳細を見てください。

Screen Shot 2020-05-23 at 17.15.17.png

青色の "Open in Project" (プロジェクト内で開く) ボタンをクリックすると、自分のプロジェクトファイルを選択でき、どのラインでクラッシュがあったのかを教えてくれます。

Metrics

これまでの記事で話したように、メトリクスをチェックしてメモリに問題がないかどうかを確認することもお勧めします。

iOSアプリのメモリリーク (Memory Leak) の検出とデバッグの方法を、ネコに関するプログラムで学びましょう。(Reference Cycle 参照サイクル)


:relaxed: Twitter @MszPro

:sunny: 私の公開されているQiita記事のリストをカテゴリー別にご覧いただけます。

14
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
19