Отладка Java-приложения без запуска JVM с аргументами отладки - PullRequest
91 голосов
/ 18 декабря 2008

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

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

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

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

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

из справочной страницы JVM

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

Ответы [ 5 ]

45 голосов
/ 18 декабря 2008

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

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

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

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

28 голосов
/ 10 июня 2010

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

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

jdb -connect sun.jvm.hotspot.jdi.SAPIDAttachingConnector:pid=9426
7 голосов
/ 18 декабря 2008

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

5 голосов
/ 08 октября 2009

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

0 голосов
/ 18 декабря 2008

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

...