Допустим, у меня запущен поток (критический). Допустим, у меня есть другой поток (WatchDog) в том же процессе, который периодически проверяет, достаточно ли быстро обрабатывает Critical задания или потратил> X секунд на 1 задание. Если Critical тратит> X секунд на 1 задание, то WatchDog захватывает стек вызовов Critical, некоторую другую диагностическую информацию и сообщает об ошибке. (Одним из мест, где я использую это, является обнаружение зависания потока пользовательского интерфейса Swing. Я использую это в других местах, чувствительных к производительности, в коде.)
Если я присоединяю отладчик (например, Eclipse), устанавливаю точку останова и Critical достигает точки останова, то WatchDog сообщит об ошибке, потому что Critical занимает слишком много времени. Как я могу заставить WatchDog обнаружить, что Critical достиг точки останова, и не сообщать об ошибке?
В настоящее время я просто отключаю WatchDog при работе на компьютере разработчика; в противном случае я получу много отчетов об ошибках (ошибки, записанные в консоль на компьютере разработчика). Если я просто обнаружу, что отладчик подключен, то WatchDog почти всегда будет отключен, поскольку именно так я запускаю программу. Таким образом, обнаружения подключенного отладчика недостаточно.
Я мог бы установить точку останова в WatchDog прямо перед тем, как он сообщит об ошибке. Затем я мог бы разрешить WatchDog возобновить работу, если обнаружит реальную ошибку. Это нормально, но я ищу что-то более автоматизированное.
JVM знает, что поток достиг точки останова. Как мне проверить это состояние?
Примечание: Этот вопрос такой же, но для .Net.