🐞 デバッグの基本と情報収集

プログラムに潜むバグ(誤り)を見つけ出し、修正する作業をデバッグと呼びます。例外処理と合わせて、デバッグはプログラムを安定稼働させるために不可欠なスキルです。

1. バグの種類

種類特徴検出タイミング
コンパイルエラー文法や型の間違いなど、Javaのルール違反。プログラム実行前(コンパイル時)
実行時エラー (例外)処理中に発生する問題(NullPointerExceptionなど)。プログラム実行中(ランタイム)
論理エラープログラムは正常に動作するが、結果が期待と異なる。プログラム実行後(デバッグ時)

📝 2. System.out.println を使った情報収集

最もシンプルかつ頻繁に使われるデバッグ手法が、特定のタイミングで変数やメッセージをコンソールに出力してプログラムの状態を把握することです。

使用方法

処理の途中にSystem.out.printlnを挿入し、その時点の変数の値や、現在どの処理ブロックが実行されたかを確認します。

Java

public class DebugExample {
    public static void main(String[] args) {
        int a = 10;
        int b = 5;

        // 実行開始時にメッセージを出力
        System.out.println("--- 処理開始 ---");

        if (a > b) {
            // 条件式が真のとき、実行されたことを確認
            System.out.println("DEBUG: ifブロックに入りました。"); 
            a = a + b;
        }

        // 重要な変数の値を確認
        System.out.println("DEBUG: 変数 a の現在の値: " + a); // 15が出力される
        
        // ... 残りの処理 ...
        
        System.out.println("--- 処理終了 ---");
    }
}

💡 便利なテクニック

  • エラー出力: エラーやデバッグ用のメッセージを通常の出力と区別するために、**System.err.println()**を使うことがあります。これは、IDEによっては赤字で表示されるなど、視覚的に目立ちます。
  • 例外情報の出力: catchブロック内でe.printStackTrace()を使うと、例外発生時のメソッド呼び出し履歴(スタックトレース)が詳細に出力され、どこで例外が発生したかを特定できます。

🛠️ 3. 統合開発環境 (IDE) のデバッガ

大規模なプログラムではprintlnデバッグは非効率になるため、EclipseやIntelliJ IDEAなどのIDEに搭載されているデバッガを使用します。

  1. ブレークポイントの設定: プログラムを一時停止させたい行に目印(ブレークポイント)を設定します。
  2. デバッグ実行: プログラムをデバッグモードで実行します。
  3. ステップ実行: プログラムがブレークポイントで止まった後、「ステップイン(メソッドの内部に入る)」や「ステップオーバー(メソッドをスキップして次の行へ)」などの機能を使って、処理を一行ずつ進めます。
  4. 変数ウィンドウ: デバッグ実行中は、その時点でのすべての変数やオブジェクトの状態をリアルタイムで確認できます。

これにより、プログラムが想定外の値を持っている瞬間や、特定の条件式がtrueになるかfalseになるかを正確に検証できます。