Отладка 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