導入
エラーメッセージが出ない「計算結果がなぜかおかしい」バグは、居場所を論理的に絞り込む必要があります。プロが日常的に使う地道で確実な手法を身につけましょう。
図解
flowchart TB
B["バグがある(結果がおかしい)"] --> H["仮説: 原因はここでは?"]
H --> P["プリントデバッグ<br/>途中の値を出力して確認"]
P --> C{"想定と一致?"}
C -->|はい| N["原因はより後ろ → 範囲を狭める"]
C -->|いいえ| F["原因はここ → 特定"]
N --> P
サンプル
プリントデバッグ——途中の値をConsole.WriteLineで出して、どこで想定と食い違うかを突き止める手法です。
// 「合計の平均」を求めたいのに結果がおかしい、という状況を調べる
int[] scores = { 80, 90, 100 };
int sum = 0;
foreach (int s in scores)
{
sum += s;
Console.WriteLine($"[debug] 加算中 sum={sum}"); // 途中経過を可視化
}
int average = sum / scores.Length;
Console.WriteLine($"[debug] sum={sum}, length={scores.Length}"); // 最終確認
Console.WriteLine($"平均: {average}");
- 途中に
[debug]付きの出力を挟み、変数が想定どおりに変化しているか確認する - 「正しい箇所」と「おかしい箇所」の境目を二分探索の要領で詰めていく
- 原因を特定できたらデバッグ出力は消す
演習
// 下のコードは「1から5の合計=15」を出したいが、結果が違います。
// TODO: プリントデバッグで原因を見つけ、"15" と正しく出力されるよう修正してください
int total = 0;
for (int i = 1; i < 5; i++) // ← ここに間違いがあります
{
total += i;
}
Console.WriteLine(total);
- 期待される出力:
15
ヒント1を見る
ループが何回回っているか、iの最終値を出力して確認しましょう。i < 5だと5が足されません
ヒント2を見る
条件をi <= 5に直します
まとめ
- 出ないバグは「仮説→検証」で居場所を論理的に絞り込む
- プリントデバッグ+二分探索で境目を詰めるのが確実
- 本格的な開発ではデバッガのブレークポイントも使う(ローカル実施の章で登場)
次章: .NETに最初から備わる道具箱「標準ライブラリの必需品」へ進みます。