概要
開発や競技プログラミングをしている際、
- その変数が任意のタイミングでどのような値を持っているのか
- この関数はどのタイミングで処理されているのか
といったことが気になる場面が多々あると思います。
そこで登場するのが print
関数です。これを使うことにより、コンソールやターミナル上に変数や文字列を表示できます。しかし、この関数にはいくつかの欠点があります。
今回は print
関数を使うことのデメリットと breakpoint を使ったスマートな方法を紹介します。
printデバッグとは
上記にも述べたとおり、我々が最も知っているデバッグ方法が print
デバッグでしょう。
JavaScript なら console.log
、Java や Kotlin なら println
、PHP なら echo
、Ruby なら puts
がこれに当てはまります。
iOS の場合では print
もしくは NSLog
です。
これらの関数はプログラムのある時点でデータの流れや状態を追跡することで、エラーの原因や特定をするのに役立ちます。
printデバッグの長所
print デバッグの最大の長所は使いやすさです。
やり方は単純で、追跡したい場所に print
を置くだけです。
このやり方は様々なプログラミング入門書で紹介されています。
printデバッグの短所
print デバッグの短所はテスト後に多くの後始末をする必要がある点です。
print デバッグは一時的なものであり、通常はバグが解消された時点で削除されます。
これを怠ると、ランタイムが遅くなる原因になります。
Xcode には Find という機能があり、そこで"print"と検索すれば探し出すことができますが、
時々、削除するのを忘れてしまい、レビュー時に指摘される場面が多々あると思います(実体験)。
これらの解決方法として、#if DEBUG
を使うことで print
関数を削除する方法などがあります。
override func viewDidLoad() {
super.viewDidLoad()
#if DEBUG
print("Hello World")
#endif
// 色々な処理
}
しかし、これは不要なコードを隠しているだけで、根本的な解決にはなっていません。
処理内容のログを取得したい場合は、OSLog
のようなツールを使用してください。
この記事では、一時的なバグを修正するために print
関数を使うことについて解説します。
また、print デバッグのもう 1 つの問題点は、新しい print
関数を追加したい場合、アプリを再度 build する必要があります。
Break Pointを使ったデバッグ方法
では、ここから本題の Break Point を使ったデバッグ方法について解説します。
この方法を使うと、見た目がスッキリして print
デバッグの短所を克服できます。
文字列を表示する方法
Break Point を使って任意の文字列を表示させます。
方法は以下の通りです。
- 自分が print デバッグしたい箇所の行番号をダブルクリックする
- 以下の画像のように、Break Point Editor を表示される
- Add Actionボタンをクリックし、Log Messageを選択する。出力したい文字列を text フィールドに入力する
- Automatically continue after evaluating actionsをオンにする。これにより、この Break Point はデバッガが停止するのを防ぎます
これで、Break Point の行に達すると、コンソールにログメッセージが表示されます。
画像の場合だと Hello World
と表示されます。
以上のように、必要なステップはとても少ないです。
そのため、print
関数のように手軽に設置することが可能だと思います。
変数を表示する
次に変数を表示する方法を解説します。
方法は以下の通りです。
- 自分が print デバッグしたい箇所の行番号をダブルクリックする
- 以下の画像のように、Break Point Editor を表示される
-
Add Actionボタンをクリックし、Debugger Commandを選択する。出力したい任意のコマンドをテキストフィールドに入力します。
po print(hoge)
のように接頭辞を必ずつけてください - Automatically continue after evaluating actionsをオンにする。これにより、この Break Point はデバッガが停止するのを防ぎます
これで、ブレークポイントの行に達すると、コンソールに変数が表示されます。
この場合は、101
が表示されます。
長所
以上のように、Break Point を使うことによってより多くの利点が得られます。
- あちらこちらに
print
関数がないので、後始末が不要:ブレークポイントを無効にするか、削除すればなくなります - 素早く動かすことができる:ドラックすることによって行を移動することが可能です
- アプリを再度 build する必要がなくなる:Break Point を追加・編集・削除・移動する際にアプリを再度コンパイルする必要がなくなります
参考文献