はじめてのデバッグ

この記事では、プログラミングの入門者に向けて一般的なデバッグの方法を説明します。


taiseiue | 2024-02-15

バグのないプログラムは存在しないがデバックの不可能なプログラムもまた存在しない。違うか?

(攻殻機動隊Ghost in the Shell)

デバッグなしで完璧なコードを書けるプログラマーなどいません。 時には、書いた内容とまったく違う動作になることすらあります。 大切なことは、常に完璧なコードを書くことではなく、適切にデバッグを行ってコードを完璧な状態に近づけていくことです。

AliceScriptのCLIである、aliceコマンドには簡易的なデバッガー機能が備わっています。デバッガーとは、コード中のすべてのバグを指摘してくれる魔法のようなものではありません。デバッグとは、コードを1つずつ実行していき、「どこまで正しく動作するのか」、「どこで想定外の挙動をしたのか」を見つける作業に他なりません。

課題を明確にする

バグの修正に取り掛かる前に、一度現在の状況を明確にしてみましょう。この記事にたどり着いたあなたはきっとすでにバグに直面している頃でしょうし。(もしかしたら、AliceScript以外の言語を使っているかもしれませんが) ひとまず落ち着いて、以下の項目に答えてみましょう。これは、ラバー・ダック・デバッキングと呼ばれる問題解決の手法です。

  • 何をするためのコードですか?
  • どんな結果を予想していましたか?
  • 予想に反して、どんなことが起こりましたか?
  • 問題のコードに心当たりはありますか?

前提を調べる

バグを調査する前に、結果を期待するに至った前提を考えてください。隠れた前提や未知の前提があると、原因を究明しようとしても、うまく問題が見つからない可能性があります。

  • 正しいAPIを使用していますか?関数名は間違えていませんか?
  • APIを正しく使用していますか?引数や戻り値の扱いを間違えていませんか?
  • コードにタイプミスはありませんか?変数の宣言が不要な言語を使っている場合はとくに注意。
  • 直前に何をしましたか?どんな些細なことでも、それが問題を引き起こしている可能性があります。
  • 変数や定数の値、取りうる範囲を把握できていますか?動的型付け言語ではとくに注意。
  • コードの意図を正しく理解できていますか?それが他人のコードの場合は、先に一連のコードの流れを理解することが重要です。