0

メソッドで動作する 4 つのワーカー スレッドを持つプログラムがあります。メソッドにブレークポイントを配置すると、各ワーカー スレッドが一時停止しますが、ステップ イン ボタンとステップ オーバー ボタン (および再生/一時停止/終了) が無効になるため、実行パスをたどることができません。

worker1 スレッド名を参照する条件付きブレークポイントを使用してスレッドを一時停止し、1 つのスレッドを一時停止するだけでなく、suspendVM を使用してみましたが、違いはありません。ステップ イン/ステップ オーバー ボタンは無効になっています。

これを機能させる方法を知っている人はいますか?単一のメインスレッドのみを実行している場合、正常に動作します。

4

2 に答える 2

0

理由は、スレッドがコードによってブロックされているためです。例えば:

pulic void methodA(){
    ...
    methodB()
    ...
}

public void methodB{
    ...
    while(true){// it can be some other reason to block this thread
        Thread.sleep(100);
    }
    ...
}

methodA で F6(step over) すると、スレッドの状態が「stepping」になり、step instep overstep returnボタンの状態が無効になります。

于 2016-03-20T07:57:20.507 に答える
0

うまくいきましたが、方法は聞かないでください。ネイティブメソッドと関係があると思います。メソッドの横 (コール スタック内) にキーがあるときにスレッドが中断した場合、ステップ ボタンは使用できませんが、コール スタック内の 3 つの青いバーの場合は使用できます。どちらが当たるかは運次第のようですので、当たるまでプログラムをやり直します。

于 2015-09-10T02:05:53.260 に答える