1

Web アプリケーションのスレッドの問題を突き止めようとしています。私はエクリプスを使用しています。問題は、1 つのスレッドが非常に長く曲がりくねったコードの特定の段階にあり、別のスレッドが先に進むべきであっても、それ以上先に進めない場合です。ブロックされたスレッドのように見えます。Eclipseはそれを「ステッピング」とマークしました。コードの近くにモニター、セマフォ、同期ブロックがないため、なぜ停止したのか意味がありません。

Eclipse で何かを使用して、スレッドがブロックされているように見える理由を理解できますか?

スレッドを一時停止する一時停止ボタンを押すことができます。再開ボタンをクリックすると、「ステッピング」に戻りますが、次の単純なコード行を完了できません。

long beginTime = System.currentTimeMillis();

ありがとう。

4

2 に答える 2

3

Eclipse では、スレッドを「ステッピング」とマークすることは、コードをステップ インまたは (より可能性が高い) ステップ オーバーでステップ実行していることを意味し、スレッドは何らかの IO を実行するか、同期ロックを待機するかのいずれかでブロックされます。の呼び出しwait()など。Eclipse はスレッドを制御しておらず、スレッドが「ステッピング」を続行する前にブロックを通過するのを待っています。Eclipse が次の行でスレッドの制御を戻すと、スレッドは「一時停止」に変更されます。

たとえば、次のテスト コードをデバッグする場合:

// i put a break point here
System.out.println("Foo");
Object lock = new Object();
synchronized (lock) {
    // when I step over this line, my thread is labeled as "Stepping"
    lock.wait();
}
System.out.println("Boo");

スレッドをブロックするメソッドをステップ オーバーすると、スレッドは「ステッピング」とラベル付けされます。

ここに画像の説明を入力

于 2012-07-13T16:53:03.007 に答える
1

「ステッピング」とは、Eclipse が「コードをステップ実行」していて、現在その行にいる、つまりデバッグ モードで実行していると認識しているように聞こえます。見逃したブレークポイントがどこかに設定されていませんか?

于 2012-07-13T16:46:48.510 に答える