プログラムの不具合(バグ)を見つけて取り除く作業を支援するツール。
デバッガとは、プログラムの不具合(=バグのこと)の原因を究明し、取り除く作業を支援するツールです。動いているプログラムを途中で止めたり、変数(=値を入れておく箱)の中身をのぞいたりできます。
身近な例で考えると、車の故障を調べる整備士の点検に似ています。エンジンを動かしたまま要所要所で止め、計器の数値を読みながら「どこで異常が起きるか」を1つずつ確かめていきます。デバッガも同じように、プログラムの内部を点検する道具です。
上のツールで▶ボタンを押すと、ブレークポイントを置いて実行を止め、変数の値を確認し、ステップ実行でバグ箇所を特定するまでの一連の流れを確認できます。
デバッガには、バグの原因を探すための代表的な機能がそろっています。
・ブレークポイント:指定した行に実行が来た瞬間にプログラムを一時停止させる
・ステップ実行:プログラムを1行ずつ進めながら、変数の変化を追う
・変数監視:停止中の各変数の値を確認する
・コールスタック表示:いまどの関数がどの関数から呼ばれて動いているかを一覧で見る
これらを組み合わせると、「どの行で・どの変数が・どんな値になったときに」おかしくなるのかを、推測ではなく事実として確認できます。たとえばブレークポイントで止めて変数監視を見れば、その時点の正確な状態が一目で分かります。
とくにコールスタックは、関数が次々と呼び出される複雑な処理で「どこからここに来たのか」をたどるのに役立ちます。料理のレシピで「いまどの工程の中にいるか」を確認するようなものです。
やみくもにコードを眺めても、バグはなかなか見つかりません。効率よく原因にたどり着くには、次のような手順が有効です。
・再現条件を絞る:どんな入力・操作で必ず不具合が起きるかを特定する
・怪しい箇所で止める:当たりをつけた行にブレークポイントを置いて状態を確認する
・二分探索的に絞る:処理の中間地点で値を確認し、原因が前半か後半かで範囲を半分にしていく
・変数の値を逐次確認:ステップ実行で1行ずつ進め、値が想定とずれた瞬間を捕まえる
とくに二分探索的なアプローチは強力です。処理の真ん中で値を確認し、そこまでが正常なら原因は後半に、すでに異常なら前半にあると分かります。これを繰り返せば、長いプログラムでも数回で原因の範囲を一気に狭められます。
上のツールの例では、ループ条件 i < n が原因で最後の数を足し損ねていました。変数 i と total の値を1行ずつ追ったことで、たった1文字の違いがバグの原因だと特定できています。