Отладка Java InterruptedException, т.е. поиск причины

Во время отладки Android-приложения иногда возникает InterruptedException и происходит сбой приложения. Мне удалось установить точку останова на обработчике исключений по умолчанию, но стек вызовов не информативен.

at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:1991)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2025)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1048)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:776)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:820)

Что говорит то, что прерванный поток всегда RxCachedThreadScheduler-4 (или некоторый другой номер)

Каков будет систематический подход к поиску первопричины исключения?

2 ответа

Установить точку останова на метод Thread::interrupt и поймать обидчика. Если вы думаете, что это прерывание не должно произойти, и вы не можете отключить вызов, который прерывает ваш поток, тогда вы можете переопределить Thread::interrupt в вашей реализации потока и заставить пул потоков использовать вашу реализацию, предоставив свой собственный ThreadFactory,

Похоже, что сбой происходит из стороннего пакета кода, вы должны опубликовать свою проблему с исходным проектом, а также для получения дополнительной помощи. Пожалуйста, отправьте любой код, связанный с тем, как вы используете этот пакет, чтобы помочь устранить неполадки тоже. Убедитесь, что вы используете последнюю версию этого пакета, если они уже исправили эту проблему. Трассировка стека не очень полезна, потому что другой проект запускает потоки, и сбой происходит в одном из их потоков. Скорее всего, вы используете пакет не по назначению или в нем есть ошибка, которую нужно исправить.

https://github.com/ReactiveX/RxJava
Другие вопросы по тегам