Обычно для присоединения отладчика к работающему jvm вам необходимо запустить jvm с такими аргументами, как:
> java -Xdebug -Xrunjdwp:transport=dt_socket,address=1000,server=y,suspend=n
Теперь, если я хочу отладить процесс, который не был запущен в режиме отладки, что я могу сделать?
Эта ситуация возникает, когда производственная система (т. Е. Запущенная без аргументов отладки) обнаруживает «случайную» (я использую термин вольно) ошибку. Поэтому я не могу перезапустить jvm с соответствующими аргументами, потому что никто не знает, как снова воспроизвести ошибку. Разве в этой ситуации невозможно подключиться к JVM?
Просто чтобы уточнить, нельзя использовать такие инструменты, как jdb, для подключения к уже запущенным JVM, если они не были запущены в режиме отладки.
со страницы руководства JVM
Другой способ использовать jdb - подключить его к уже запущенной виртуальной машине Java. Виртуальная машина, которая должна быть отлажена с помощью jdb, должна быть запущена со следующими параметрами:
источник
Ответы:
Вы можете использовать jsadebugd ( JDK ) для присоединения отладочного сервера к процессу (доступно в Windows с помощью средств отладки для Windows ). Он отмечен как экспериментальный, поэтому сначала вы можете попробовать его на тестовой машине.
Применение:
Имя коннектора с аргументом можно найти с помощью
jdb -listconnectors
.источник
jsadebugd
был заменен наjhsdb debugd
. Так что становитсяjhsdb debugd --pid <pid>
. См. Слайды выступления, посвященного jhsdb, и документации по jhsdbSADebugServerAttachingConnector
удалилиjdb
, и я думаю, замена должна бытьjhsdb hsdb
/jhsdb clhsdb
. Я не могу найти никаких документов о том, какие аргументы приводитьjhsdb clhsdb
.в советской россии источник читает вас
jdb -connect sun.jvm.hotspot.jdi.SAPIDAttachingConnector:pid=9426
источник
VisualVM не является отладчиком, но вы можете получать из него дампы потоков и кучи, которые могут быть полезны при диагностике некоторых проблем. Для наиболее полезных функций требуется JVM 5 или 6.
источник
использование jstack (полезно в случае взаимоблокировок) или плагина btrace VisualVM также может помочь
источник
Вы всегда можете использовать jdb и отлаживать вручную: P
источник