Отладка 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, должна быть запущена со следующими параметрами:

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

Применение:

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

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

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

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

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

использование jstack (полезно в случае взаимоблокировок) или плагин vtv для Visual Basic, также может сделать трюк

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

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

  • Как я могу отлаживать javascript на Android?
  • Как определить, было ли приложение .NET скомпилировано в режиме DEBUG или RELEASE?
  • Простой способ отладки службы Windows
  • Получение состояния переменных после ошибки в R
  • Xcode / LLDB: как получить информацию об исключении, которое было просто выброшено?
  • Как отобразить динамически выделенный массив в отладчике Visual Studio?
  • Visual Studio 2010 «Не удается найти или открыть файл PDB»
  • Как я могу узнать, что делает мой запрос на активные запросы?
  • Индексы индексов должны быть либо натуральными натуральными, либо логическими, общим решением
  • Как добавить точку останова в objc_exception_throw?
  • Как перенаправить qDebug, qWarning, qCritical etc output?
  • Давайте будем гением компьютера.