Вероятно, очевидный вопрос, но вы уверены, что ловите Throwable? Непроверенное исключение может легко привести к смерти рассматриваемого потока (при условии, что никто из вас в стеке вызовов его не перехватит).
Поскольку вы приостанавливаете виртуальную машину при запуске с аргументами отладки, я предполагаю, что вы подтвердили, что отладчик подключается правильно. Тот факт, что вы говорите, что отладчик пропускает сразу после вызова, очень подозрительно. Вы можете достичь каких-либо точек останова в этом приложении? Как насчет этого класса? Как насчет этой темы?
Как вы сузили строку без отладчика? println / отладка в файл?
Можете ли вы вставить фрагмент кода рассматриваемого метода?
Вы можете подтвердить теорию о том, что поток умирает, создав второй поток до того, как возникнет проблема, и подключив его к потоку, который, по вашему мнению, умирает. Тогда метод run () второго потока будет вызываться при выходе из рассматриваемого потока, и вы будете знать, что он умер (но все равно не будет знать, почему.)
В ответ на ваш общий вопрос, когда у меня есть ошибка в приложении Java, которую я не могу воспроизвести в отладчике (что происходит время от времени по разным причинам), я постепенно изменяю свой код с помощью команды sysout printlns или вывода к файлам. При необходимости я также могу изменить код, который вызывает мой код. Если у вас нет исходного кода для кода, который вы вызываете, вы можете попробовать одну из многих инфраструктур BCI, чтобы внедрить ваш байт-код в рассматриваемые методы. Это утомительный процесс, но только изредка.