1

マルチスレッド プログラムをデバッグしようとすると、新しい問題が発生します。以下に、私の問題を示すテスト プログラムを含めました。基本的に、スレッドの start() メソッドの呼び出しとそのスレッドの run() メソッドにブレークポイントを設定すると、デバッガーで「続行」すれば問題ありません。ただし、ステップ オーバーすると、start()、println()、および join() の呼び出しをステップ オーバーできます。その後、プログラムは実行が終了するのを待ちますが、それは決して起こりません。スレッドが実行されていないようで、スレッドの run() のブレークポイントがトリップすることはありません。プログラムをやめなければなりません。

run() にブレークポイントがない場合、続行するかステップするかは問題ではありません。スレッドが実行されます。ここで何が欠けていますか?

バニラ Eclipse デバッグを使用していることに注意してください。

public class Test {
    public static void main(String[] args) {
        try {
            Thread myThread = new Test().new TestThread();
            long threadStartTime = System.currentTimeMillis();
            myThread.start(); // **********Breakpoint 1
            System.out.println("Thread started");
            myThread.join();
            long threadExecutionTime = System.currentTimeMillis() - threadStartTime;
            System.out.println("Thread finished execution in " + threadExecutionTime + " milliseconds.");
        } catch(InterruptedException e) {
            System.err.println(e.getMessage());
        }
    }

    private class TestThread extends Thread {
        @Override
        public void run() { // **********Breakpoint 2
            try {
                sleep(5*1000);
            } catch(InterruptedException e) {
                System.err.println(e.getMessage());
            }
        }
    }
}
4

2 に答える 2

3

Eclipseを使用してデバッグしている場合は、デバッグウィンドウにスレッドのリストが表示されます。そこから他のスレッドのスタックトレースを選択すると、runメソッドもデバッグできるはずです。

于 2012-05-30T14:03:32.327 に答える
3

のブレークポイントが作動してrun()いないことを確認しますか?Eclipseでは、2番目のスレッドをクリックして、一時停止されていることを確認する必要があります。スレッドが開始されたと思われますが、続行するように言われるのを待っています。

ブレークポイントがない場合はrun()、ステップオーバーで問題なく動作すると思いますstart()sleep()他のスレッドを保持し、そのスレッドの実行またはに戻るのを停止しているのは、2番目のブレークポイントですjoin()

start()次の画像では、メソッドをステップオーバーして開始されたことがわかりますThread-1。ただし、一時停止され(黄色の一時停止バーを参照)、切り替えて続行するのを待ちます。

ここに画像の説明を入力してください

于 2012-05-30T14:03:35.977 に答える