web-dev-qa-db-ja.com

IntelliJデバッガーがスタックする

私は通常のJavaアプリケーション、GUIなし、多くの計算と問題が発生したときのメインスレッドのスタックでの最大5回の呼び出しをデバッグしています。基本的に、「データを収集しています」ローカル変数ウォッチで。

enter image description here

したがって、段階的に進む代わりに、「Resume」を押した直後にブレークポイントを追加しようとしました。 「最後のデバッガコマンドが完了するまで待機しています」と表示されます。 enter image description here

誰かが以前にこの問題を抱えていましたか?デバッガを変更することがこれを理解する唯一の方法ですか?

24
Luca Mozzo

IntelliJ(2017.1.4 Community Edition)では、次のようにして問題を修正しました:

  • ファイル->設定
  • 「toString」と入力します
  • ビルド、実行、配置->デバッガ->データビュー-> Javaに移動します。
  • 「 'toString()'オブジェクトビューを有効にする:」チェックボックスを見つけます。
  • チェックを外すボックス

デバッガを再実行します。

39
CharlieB

IntelliJ 2018.2.4で次のように修正しました。

  • ブレークポイントを右クリック
  • 「すべて」ではなく「スレッド」を一時停止するように設定を切り替えます

デバッグのためにすべてのスレッドを実際に中断する必要がある場合、これは役に立ちませんが、「データを収集しています...」および「最後のデバッガーコマンドが完了するまで待機しています」というメッセージが表示されなくなりました。この設定は後続のブレークポイントでも保持されるため、一度変更するだけで済みます。

8
ayluo

私は同じ問題のように見えるものに遭遇しました。私の場合、それは「悪い」toStringメソッドを持つブレークポイントスタックトレースのクラス(KafkaStream)でした。 toStringメソッドはブロックするため、デバッガーがハングします。メイン行のコードでtoStringメソッドをテストしましたが、メインスレッドがハングしました(つまり、これはデバッガー固有の問題ではありません)。

これが、ブレークポイントにヒットした私のスレッドのスタックトレースです(私のクラスのブール属性をテストしようとした行)。

Hung Breakpoint Stacktrace

Intellijは私の問題を回避する方法を提供します。これにより、デバッガーがクラスをレンダリングする方法をオーバーライドできます。

Work Around

問題が再発した場合は、スレッドダンプ(IDEの内部または外部)を取得して、スレッドの動作を確認することをお勧めします。

2
James Lent

ほとんどの場合、デバッグ中に追加したウォッチが原因です。コード内と同じステートメントが再帰的に実行されることになるwatchステートメントをクリアします。デバッグを行う前に、常に時計を清潔に保ってください。

0
Sravan Reddy

私にとってうまくいった修正は、メソッドのブレークポイントを削除することでした。それはそれを超高速にしました。

0
Ramana Malladi