пятница, 25 августа 2017 г.

Как поставить бряк на поток в IDEA


Когда ставишь breakpoint, то можно ткнуть на него правой кнопкой мыши и переставить радио-баттон с All на Thread. 

Тогда ты подцепишься только к одному потоку, а остальное приложение продолжит работу.

А зачем это?


У нас в системе можно запускать разные задачки. Загрузить данные из файлика, поискать дубликаты, сделать мэджик раз, сделать мэджик два, три, четыре, пять, я пошел искать... Обычно задачи работают с БД, поэтому блокируют друг друга, если запускать в параллель. Блокировка сделана на уровне приложения, чтобы не словить локи в базе.

Но некоторые задачи вполне могут выполняться вместе. Это отдельная настройка. И вот сегодня я проверяю, что задача 1 и задача 2 могут выполняться параллельно. Одна беда — обе слишком шустрые. На реальных стендах данных много, задачи идут пару часов. А у меня в базе десяток записей, тыкаешь в кнопочку, а задача уже отработала!


Как заставить задачу 1 работать долго, чтобы проверить, что я могу запустить в параллель задачу 2? Иногда помогает генерация данных. Например, если задача 1 — загрузка из файла, можно подготовить файл на 100500 строк. Ну, или поставить breakpoint в коде и начать дебажить ツ

Так и поступила:

  • Ставлю бряк.
  • Подключаюсь к тестовому стенду в режиме дебага.
  • Запускаю задачу 1 — стенд зависает. Ага, попал в мой капкап! Но есть проблема — весь стенд подвис, пока я не «отпущу» дебаг. И я не могу запустить задачу 2.

Спросила у коллеги, что делать. Она и подсказала, что можно поставить бряк только на один поток. В итоге:

  • Ставлю бряк, тыкаю на него правой кнопкой мыши и меняю с all на thread.
  • Подключаюсь к тестовому стенду в режиме дебага.
  • Запускаю задачу 1 — задача зависает, стенд нет!
  • Запускаю задачу 2 — теперь я точно уверена, что они не конфликтуют!

Комментариев нет:

Отправить комментарий