本文へスキップ
BecomeCoder

C#文法コース · 第7章 エラーとデバッグ · レッスン53

デバッグの考え方

ブラウザで完結

導入

エラーメッセージが出ない「計算結果がなぜかおかしい」バグは、居場所を論理的に絞り込む必要があります。プロが日常的に使う地道で確実な手法を身につけましょう。

図解

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に最初から備わる道具箱「標準ライブラリの必需品」へ進みます。

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

C# — ブラウザ内で実行

ブラウザ内でC#を動かす環境を読み込みます(初回のみ数秒)。
スクロールして表示された時点でも自動で読み込まれます。