5

Java マルチスレッド プログラムのデバッグ中に、ブレークポイントを設定しました。開始メソッドが呼び出された後、コントロールがメソッドを実行しません。デバッグ手順を教えてください。

サンプルコード

class Test extends Thread { 
    public static void main(String[] args) { 
        try { 
            Thread t = new Thread(new Test());
            t.start(); 
            t.start(); 
        } catch (Exception e) { 
             System.out.print("e "); 
        } 
    } 

    public void run() { 
        for(int i = 0; i < 2; i++) 
            System.out.print(Thread.currentThread().getName() + " "); 
    }
}
4

1 に答える 1

8

ブレークポイントがメイン スレッドにあるため、デバッガーはメイン スレッドから開始します。
t.start()新しいスレッドを生成します。
ただし、デバッガーはメイン スレッド自体を続行します。

新しく作成されたスレッドをデバッグする場合は、run()メソッドにもブレークポイントを設定する必要があります。その後、デバッガー コントロールは新しく作成されたスレッドに移動しますが、ユーザーには表示されません。

run()新しく作成されたスレッドのメソッドでコントロールを表示したい場合は、以下の手順に従う必要があります -

  1. run()メソッドと一緒にメソッドにブレークポイントを置きますmain()
  2. ステートメントに到達するまで、プログラムのデバッグを開始しますt.start()
  3. が完了したらt.start()、[デバッグ] ビューに移動します。そこでは、2 つのスレッドが実行されていることがわかります (「ウィンドウ -> ビューの表示 -> デバッグ」に移動すると、Eclipse で「デバッグ」ビューを見つけることができます)。
    • 最初のものはメインスレッドです
    • 2 つ目は、新しく作成されたスレッドです (例 [Thread-1] )。
  4. 2 番目のスレッドをクリックして、コントロールの実行メソッドを表示します。
  5. スレッドの実行が完了したら、再び [デバッグ] ビューに移動し、メイン スレッドをクリックしてメイン スレッドのデバッグを続行します。

注:スレッドの終わりに向かって 3 番目のステップの後、メイン スレッドを続行すると、新しいスレッドをデバッグできなくなります。

于 2013-09-18T14:12:38.593 に答える