JavaA2Z

KAB-studio > プログラミング > JavaA2Z > デバッグとは

デバッグ

日本語 虫取り
英語 debug
ふりがな でばっぐ
フリガナ デバッグ

解説

バグを取り除く作業。
バグが発生した場合に、そのバグを取り除くため、特殊な方法で実し、バグの発生源を突き止めること。
 
デバッグをうためには、通常とは別の方法で実する。この実そのものを「デバッグ」と言う場合もある。また「デバッグ実」と言う場合もある。
この特殊な実時には、「ブレークポイント」を使うことでプログラムを一時停止することができる。一時停止中は、変数フィールドの中身を見ることができ、さらに値を変更することもできる。また、スタックトレースを見ることもできるため、メソッドがどう呼び出されてきたのかを確認することもできる。
 
一時停止中には、「ステップイン」「ステップアウト」「ステップオーバー」によって、プログラムを少しずつ進めることができる。
「ステップイン」は、プログラムを一ずつ進める。メソッドがある場合には、そのメソッドの中へと入る。
「ステップアウト」は、プログラムを一ずつ進める。ただし、メソッドがある場合にはメソッドの中へは入らず、メソッドを呼んでその後次のへと進む。
「ステップオーバー」は、現在のメソッド内の処理を終えて、メソッド呼び出し元へと移る。
これらを使用することでプログラムがどのように流れていくのかを確認することができ、ステートメントの動作確認に使用することができる。
 
これらの機能を駆使して、バグを取り除くことになる。
デバッグをうことで、プログラムでは見えない「変数の中身」を見ることができるため、プログラムを睨み付けるよりはデバッグしてしまう方が原因が特定しやすいこともある。「百聞は一見にしかず」である。
ただし、そのデバッグした箇所がそもそもの原因とは異なっている場合には、バグの修正が無駄に終わったり、他のバグを見逃す原因となる場合もあるため、注意が必要である。
 
デバッグをう場合、通常はデバッグをうための開発環境を用いる。
この環境を「デバッガ」と言う。
Javaの標準デバッガはjdbだが、これは非常に使いづらい。
Eclipseにもデバッガが備わっており、こちらは非常に使いやすいため、Eclipseの使用を強く勧める。
 
Eclipseであれば、の左側でダブルクリックすることでブレークポイントをセットすることができ、メニューの「実-「デバッグ」でデバッグ用の実うことができる。
デバッグには各種のビューを使用する。「デバッグ」ビューで「ステップイン」「ステップアウト」「ステップオーバー」等をうことができ、スタックトレースを見ることもできる。また、「変数ビューではローカル変数フィールドの値を見ることができ、さらに値を変更することもできる。
 
サーブレットのように、main()メソッドから始まらないプログラムの場合には、そのままではデバッグがえない。その場合、アプリケーションサーバーごとに用意されたプラグイン等を使用するか、アプリケーションサーバーJavaプログラムの場合、そのプログラムをデバッグ用に実することでデバッグをうことができる。
 
ちなみに、上記のような方法を取らず、変数プログラムの流れをprintln()メソッドで出力して、バグを見つける方法も、一応デバッグと言える。
 
バグを取り除くことが「デバッグ」だが、「デバグ」とは滅多に言わない。

参考サイト

  • (参考サイトはありません)

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // バグの例。
        int[] ints = new int[]{ 100, 200, 300 };    // ここ。
        //                    ↓これがバグ。「<」が正解。
        forint iF1 = 0; iF1 <= ints.length; ++iF1 )
        {
            System.out.println( ints[iF1] );
        }

        // 100
        // 200
        // 300
        // java.lang.ArrayIndexOutOfBoundsException: 3
        //     at Sample.main(Sample.java:10)
        // Exception in thread "main" 

        // この場合、次のような手順でデバッグするのがいいでしょう。
        
        // 1.
        // 「ここ」の行にブレークポイントをセットします。
        // 2.
        // プログラムを実行して、ブレークポイントで止めます。
        // 3.
        // 一行ずつステップオーバーしていきます。
        // そうすると、ループが4周してしまうことが発見できますので、
        // そこから原因を突き止める事ができると思います。
    }
}
// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // バグの例。
        int[] ints = new int[]{ 100, 200, 300 };	// ここ。
        //                    ↓これがバグ。「<」が正解。
        for( int iF1 = 0; iF1 <= ints.length; ++iF1 )
        {
            System.out.println( ints[iF1] );
        }

        // 100
        // 200
        // 300
        // java.lang.ArrayIndexOutOfBoundsException: 3
        //     at Sample.main(Sample.java:10)
        // Exception in thread "main" 

        // この場合、次のような手順でデバッグするのがいいでしょう。
        
        // 1.
        // 「ここ」の行にブレークポイントをセットします。
        // 2.
        // プログラムを実行して、ブレークポイントで止めます。
        // 3.
        // 一行ずつステップオーバーしていきます。
        // そうすると、ループが4周してしまうことが発見できますので、
        // そこから原因を突き止める事ができると思います。
    }
}

この単語を含むページ

「みだし」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/10/14
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。