Отладка java-приложения без запуска JVM с аргументами отладки

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

> java -Xdebug -Xrunjdwp:transport=dt_socket,address=1000,server=y,suspend=n

Теперь, если я хочу отладить процесс, который не был запущен в режиме отладки, что я могу сделать?

Эта ситуация возникает, когда производственная система (т.е. запущенная без отладочных аргументов) обнаруживает ошибку "случайный" (я использую термин "свободно" ). Поэтому я не могу перезапустить jvm с соответствующими аргументами, потому что никто не знает, как воспроизвести ошибку снова. Невозможно ли подключиться к JVM в этой ситуации?

Просто для пояснения невозможно использовать такие инструменты, как jdb, для подключения к уже запущенным JVM, если они не были запущены в режиме отладки

на странице руководства JVM

Еще один способ использования jdb - связать его с виртуальной машиной Java, которая уже работает. VM, которая должна быть отладка с помощью jdb должна быть запущена с следующие параметры:

Ответ 1

Возможно, вы сможете использовать jsadebugd (JDK), чтобы присоединить отладочный сервер к процессу (доступный в Windows с Инструменты отладки для Windows). Он помечен как экспериментальный, поэтому сначала вы можете попробовать его на тестовой машине.

Использование:

jsadebugd <pid>
jdb -connect sun.jvm.hotspot.jdi.SADebugServerAttachingConnector:debugServerName=localhost

Имя соединителя с аргументом arg можно найти с помощью jdb -listconnectors.

Ответ 2

Просто пояснить, что нельзя использовать такие инструменты, как jdb, для подключения к уже запущенным JVM → , если они не были запущены в режиме отладки

в источнике советской россии читает вас

jdb -connect sun.jvm.hotspot.jdi.SAPIDAttachingConnector:pid=9426

Ответ 3

VisualVM не является отладчиком, но вы можете получить от него дампы потоков и кучи кучи, которые могут быть полезны при диагностике некоторых проблемы. Наиболее полезные функции требуют JVM 5 или 6.

Ответ 4

с использованием jstack (полезно в случае взаимоблокировок) или btrace Плагин VisualVM также может сделать трюк

Ответ 5

Вы всегда можете использовать jdb и debug вручную: P