FE EXAM

デバッガ(バグ究明の支援ツール)

プログラムの不具合(バグ)を見つけて取り除く作業を支援するツール。

INTERACTIVE VISUALIZATION
ブレークポイント
停止中の行
バグ箇所
フェーズ
idle
停止行
監視中の変数
0
シナリオ
ステップ1 / 7
STEP 1/7デバッグ開始前これは1からnまでを足し合わせる関数 sum ですが、なぜか期待より小さい値を返してしまいます。バグ(=プログラムの不具合)の原因を、デバッガを使って順番に突き止めていきます。まずはコード全体を眺めて、怪しそうな場所に当たりをつけます。
ソースコード
1function sum(n) {2 let total = 03 for (let i = 1; i < n; i++) {4 total = total + i5 }6 return total7}
変数監視
停止中ではないため変数を確認できません。
解説

📌
デバッガとは

プログラムbugのぞく / 止めるdebug

デバッガとは、プログラムの不具合(=バグのこと)の原因を究明し、取り除く作業を支援するツールです。動いているプログラムを途中で止めたり、変数(=値を入れておく箱)の中身をのぞいたりできます。

身近な例で考えると、車の故障を調べる整備士の点検に似ています。エンジンを動かしたまま要所要所で止め、計器の数値を読みながら「どこで異常が起きるか」を1つずつ確かめていきます。デバッガも同じように、プログラムの内部を点検する道具です。

上のツールで▶ボタンを押すと、ブレークポイントを置いて実行を止め、変数の値を確認し、ステップ実行でバグ箇所を特定するまでの一連の流れを確認できます。

🔧
主要機能

デバッガには、バグの原因を探すための代表的な機能がそろっています。
ブレークポイント:指定した行に実行が来た瞬間にプログラムを一時停止させる
ステップ実行:プログラムを1行ずつ進めながら、変数の変化を追う
変数監視:停止中の各変数の値を確認する
コールスタック表示:いまどの関数がどの関数から呼ばれて動いているかを一覧で見る

これらを組み合わせると、「どの行で・どの変数が・どんな値になったときに」おかしくなるのかを、推測ではなく事実として確認できます。たとえばブレークポイントで止めて変数監視を見れば、その時点の正確な状態が一目で分かります。

とくにコールスタックは、関数が次々と呼び出される複雑な処理で「どこからここに来たのか」をたどるのに役立ちます。料理のレシピで「いまどの工程の中にいるか」を確認するようなものです。

🎯
効率的なデバッグ手法

ここで確認正常な範囲怪しい範囲二分探索的に範囲を半分ずつ絞り込む

やみくもにコードを眺めても、バグはなかなか見つかりません。効率よく原因にたどり着くには、次のような手順が有効です。
再現条件を絞る:どんな入力・操作で必ず不具合が起きるかを特定する
怪しい箇所で止める:当たりをつけた行にブレークポイントを置いて状態を確認する
二分探索的に絞る:処理の中間地点で値を確認し、原因が前半か後半かで範囲を半分にしていく
変数の値を逐次確認:ステップ実行で1行ずつ進め、値が想定とずれた瞬間を捕まえる

とくに二分探索的なアプローチは強力です。処理の真ん中で値を確認し、そこまでが正常なら原因は後半に、すでに異常なら前半にあると分かります。これを繰り返せば、長いプログラムでも数回で原因の範囲を一気に狭められます。

上のツールの例では、ループ条件 i < n が原因で最後の数を足し損ねていました。変数 i と total の値を1行ずつ追ったことで、たった1文字の違いがバグの原因だと特定できています。

練習問題

🎯
基本情報技術者 練習問題

Q1.デバッガの説明として最も適切なものはどれか。
A.プログラムの不具合(バグ)を見つけて取り除く作業を支援するツール
B.ソースコードを機械語に翻訳するツール
C.複数人のソースコードの変更履歴を記録するツール
D.ビルドとテストを自動で実行するツール
Q2.「ブレークポイント」の役割として正しいものはどれか。
A.指定した行でプログラムの実行を一時停止させる
B.プログラムの実行速度を2倍にする
C.バグを自動的に修正する
D.ソースコードを暗号化する
Q3.デバッガの「ステップ実行」の説明として正しいものはどれか。
A.プログラムを最後まで一気に実行する
B.プログラムを1行ずつ進めながら実行する
C.プログラムを並列に複数同時実行する
D.プログラムをコンパイルだけして実行はしない

関連コンテンツ