Nanashi-softプ ログラマ専用Eclipseで開発


◇Eclipseで開発 -デバッガを使ってみる(3-

次に,エラー発生時に直ちにポーズ状態になる。の検証を行います

public class main_test {
    public static void main(String[] args) {
        int[] hairetu= new int[10];
        int[] hairetu2= new int[20];
        for(int i=0; i < 20; i++){
            hairetu[i] = hairetu2[i] = 0;
        }
    }
}
初期化の際に配列のサイズを間違った例です

これを普通に実行すると,
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
    at main_test.main(main_test.java:14)
と表示されます

これだと,
hairetu[i] = hairetu2[i] = 0;
この行でエラーになったことはわかりますが,どっちの変数が? というのは,それぞれ調べる必要があります

そこで,デバッグ実行してみます
スレッド [main] (中断中 (例外 ArrayIndexOutOfBoundsException))   
    main_test.main(String[]) 行: 14   
と表示されて,該当行で停止します

……で,それぞれの変数にカーソルを当てると,配列の中身が表示されますので,
添え字iが10になっていることが見えて,
hairetuが9までしかないことがわかります


こういうデバッグ機能が威力を発揮するのは,こういうことをやっちまった場合です
public class main_test {
    int[] hairetu= new int[20];
    int[] hairetu2= new int[20];
    public static void main(String[] args) {
        hairetu= new int[10];
        hairetu2= new int[20];
        for(int i=0; i < 20; i++){
            hairetu[i] = hairetu2[i] = 0;
        }
    }
}
これだとnewを2回行っているのが一目瞭然ですが,長いソース中で書いてしまうとなかなか原因がわかりません

ただし,以下のようなことをやっちまった場合は,もう少し詳しく調べる必要があります
public class main_test {
    int[] hairetu= new int[20];
    int[] hairetu2= new int[20];
    public static void main(String[] args) {
        int[] hairetu= new int[10];
        int[] hairetu2= new int[20];
        for(int i=0; i < 20; i++){
            hairetu[i] = hairetu2[i] = 0;
        }
    }
}
ローカル変数に誤って同じ変数を宣言してしまった場合です
ソース中の変数にカーソルを当てると,hairetu変数の要素が20コあるように表示されていました
ですが,変数ウィンドウ上のhaiteru変数をダブルクリックして要素を見ると,きちんと0~9になっており,配列外アクセスしている変数を特 定できます

このようなデバッガの癖を知っておくことが重要です


TOPプログラマ 専用Eclipseで開発