Отладчик IntelliJ застревает

Я отлаживаю обычное Java-приложение, нет графического интерфейса, всего много вычислений и ~ 5 вызовов в стеке для основного потока при возникновении проблемы. В основном он продолжает говорить "Сбор данных" в локальном часовом режиме.

введите описание изображения здесь

Поэтому вместо того, чтобы идти шаг за шагом, я попытался добавить точку останова сразу после нажатия "Возобновить". Теперь он говорит: "Ожидание завершения последней команды отладчика". введите описание изображения здесь

У кого-нибудь была эта проблема раньше? Меняет ли отладчик единственный способ понять это?

Ответ 1

В IntelliJ (2017.1.4 Community Edition) следующее исправление для меня:

  • Файл- > Настройки
  • Введите "toString"
  • Перейдите к сборке, выполнению, развертыванию- > отладчику- > представлениям данных- > Java
  • Установите флажок "Включить" toString(): "checkbox"
  • Снимите флажок.

Перезапустите отладчик.

Ответ 2

Следующее исправило это для меня на IntelliJ 2018.2.4:

  • Правый щелчок точки останова
  • Переключите настройку, чтобы приостановить "Тема" вместо "Все"

Это не будет полезно, если вам действительно нужно приостановить все потоки для отладки, но это избавило меня от сообщений "Сбор данных..." и "Ожидание, пока последняя команда отладчика завершит". Настройка также сохраняется для последующих точек останова, поэтому вам нужно изменить ее только один раз.

Ответ 3

Я просто столкнулся с тем, что похоже на ту же проблему. В моем случае это был класс (KafkaStream) в трассировке стека точек останова с "плохим" toString методом. Метод toString блокирует и, следовательно, зависает отладчик. Я протестировал метод toString в главном коде строки, и он повесил основной поток (т.е. Это не проблема с отладчиком).

Вот трассировка стека для моего потока, который попал в точку останова (в строке, которая просто пыталась проверить логический атрибут моего класса):

Hung Breakpoint Stacktrace

Intellij предоставляет возможность обойти мою проблему. Это позволяет вам переопределить, как отладчик отображает класс:

Work Around

Если ваша проблема вернется, я предлагаю взять дамп потока (внутри или снаружи IDE) и посмотреть, что делает ваш поток.

Ответ 4

Исправление, которое работало для меня, состояло в том, чтобы удалить точки останова метода. Это сделало это очень быстрым.