新JavaScript入門  JavaScript,Neo-Generation  DOM  WSH  掲示板  表紙
10.フロー制御  12.ユーザー定義オブジェクト 
新JavaScript入門
11. デバッグ
今までの10回の講座でだいたいコードが書けるようになったかと思いますが、 だんだん慣れてきてプログラムが大きくなってくると必ず必要になってくるのが 「デバッグ」ですね。凡人たる我々は必ずバグに悩まされます。 今回は簡単なデバッグの方法について述べます。
Netscape や Microsoft からもデバッガが出ているようですが、 それらについては知りません。
コメント
デバッグするときコードをコメントアウトしたいときがあると思いますが、 コメントアウトにはC++と同じように、 // と /* 〜 */ が使えます。
    //これはコメントだよ
    /*これもコメントですわ*/
 
変数の値をウォッチする
今までもずいぶん使ってきていますが、実行中の変数の値を調べるには alert を使います。
    var a = 1.0;
    
    a = Math.sin(a);
    alert("" + a);      //alert(a);でもよい
    a = Math.sin(a);
    form.text1.value = a;
 
a の値を表示したメッセージボックスが現れます。
このように変数の値を表示することができますが、 これがループ内にある場合、 次々にメッセージが表示されてしまい対応できなくなる可能性もあります。 このような場合は、 confirm を使います。
confirmalert とフォーマットは同じですが、メッセージボックスに「OK」と「キャンセル」 ボタンが現れます。OKボタンを押すと true が、 キャンセルボタンを押すと false が返ります。
    function test2(form) {
        with(form.text1)
            value = primenumber(parseInt(value));
    }
    
    function primenumber(i) {
        var j, k, squareroot;
        var n = 1;
        var p = new Array(i);
        
        if(i == 1)          //ここは無くても結果的には同じ
            return 2;
        
        p[0] = 2;
        for(j = 3; n < i; j++) {    //素数がi個になるまで素数を探す
            squareroot = Math.sqrt(j + 0.5);
            //整数をその平方根以下の素数で割り切れるかどうかを調べる
            for(k = 0; p[k] < squareroot; k++)
                if(j % p[k] == 0)
                    break;
            if(p[k] > squareroot)   //割り切れなかったら
    {
                p[n++] = j;         //新しい素数として追加
    if(!confirm(j)) hoe();          //新しい素数を表示
    }
        }
        return --j;
    }
 
テキストボックスに自然数(n)を入れてボタンを押してください。 n番目の素数が返ります。
メッセージボックスでOKボタンを押したときにはそのまま、 キャンセルボタンを押したときには処理を変えてやります。 色々やり方はあるかと思いますが、 一番お手軽なのはわざとエラーを出してプログラムをストップさせることでしょう。

変数の値を書き出す
上のやり方でもいいですが、時にはいちいち変数の値を表示するのではなく、 一気にファイルに変数の値の変化を書き出したい場合もあるでしょう。 そんな場合、次のような方法ではどうでしょう。
    var szdebug;
    
    function test3(form) {
    var str;
    szdebug = "";
        with(form.text1)
            value = primenumber2(parseInt(value));
    //最後にテキストで表示する
    str = szdebug;          //オープンする前にローカル変数に格納
    var w = window.open();  //新たなウィンドウを開く
    w.document.open("text/plain");
    w.document.write(str);  //テキストを書く
    w.document.close();
    }
    
    function primenumber2(i) {
        var j, k, squareroot;
        var n = 1;
        var p = new Array(i);
        
        if(i == 1)
            return 2;
        
        p[0] = 2;
        for(j = 3; n < i; j++) {
            squareroot = Math.sqrt(j + 0.5);
            for(k = 0; p[k] < squareroot; k++)
                if(j % p[k] == 0)
                    break;
            if(p[k] > squareroot)
    {
                p[n++] = j;
    szdebug += j + "\n";    //最後に書き出す文字を格納しておく
    }
        }
        return --j;
    }
 
数字を入れてボタンを押すと、新たなウィンドウが開き素数が表示されます。
テキストボックスにあまり大きな値を入れないでください。非常に時間がかかります。 せいぜい 10000 くらいまでにしておきましょう。
このようにすると、見たい変数の値が全て最後に表示されます。
Written 11/16/97
Modified 5/5/03
first, prev, next, exit