Налагодження програми Java, не запускаючи JVM аргументами налагодження


95

Зазвичай, щоб приєднати відладчик до запущеного jvm, вам потрібно запустити jvm з таких аргументів:

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

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

Ця ситуація виникає, коли виробнича система (тобто запущена без аргументів налагодження) виявляє помилку "випадкового" (я дуже часто використовую цей термін). Тому я не можу перезапустити jvm відповідними аргументами, тому що ніхто не знає, як відтворити помилку знову. Чи неможливо приєднатися до СП у цій ситуації?

Для уточнення неможливо використовувати такі інструменти, як jdb, щоб приєднатися до вже запущених JVM, якщо вони не були запущені в режимі налагодження

зі сторінки людини JVM

Ще один спосіб використання jdb - приєднати його до вже запущеної програми VM Java. Віртуальний комп'ютер, який має бути налагоджений у jdb, слід запустити з таких параметрів:


Відповіді:


47

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

Використання:

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

Ім'я з'єднувача з аргументом можна знайти за допомогою jdb -listconnectors.


1
Я використовую linux, тому це, здається, є найбільш перспективним рішенням
hhafez

Якийсь досвід поділитися з цим?
Thorbjørn Ravn Andersen

1
Мій досвід полягає в тому, що він добре працював у ті часи, які мені знадобилися, а тим часом усі у заводських екземплярах програмного забезпечення не налаштовані запускати за допомогою програми jvm налагодження за замовчуванням, щоб ми могли використовувати підтримуваний метод.
hhafez

На Java 11 jsadebugdбув замінений на jhsdb debugd. Так це стає jhsdb debugd --pid <pid>. Дивіться слайди бесіди з презентацією jhsdb та документами для jhsdb
Дельта

Здається, SADebugServerAttachingConnectorїї також зняли jdb, і я думаю, що заміна повинна бути jhsdb hsdb/ jhsdb clhsdb. Я не можу знайти жодних документів щодо аргументів, які слід надати jhsdb clhsdb.
Дельтас

32

Для уточнення неможливо використовувати такі інструменти, як jdb, щоб приєднатися до вже запущених JVM>>, якщо вони не були запущені в режимі налагодження

у радянській Росії джерело читає вас

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

1
добре, що це "підтримка" відповіді, але експериментальна відповідь - це та, яку я прийняв, тому це можна зробити в непідтримуваній
фасії

7

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


посилання не працює .... можливо, ви видалите http: // перед https: // ... я б, але не маю ще достатньої репутації
Newtopian

+1 VisualVM виглядає дійсно цікаво. BTW: Посилання виправлено зараз.
sleske

5

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


-5

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


2
Я завжди думав, що ви не можете приєднатися до jvm за допомогою jdb, якщо jvm не запускався, щоб дозволити з'єднання налагодження. Я помиляюся?
hhafez

Наскільки я розумію, варіант, який ви згадали, - це "включити" віддалену налагодження вашої команди "java" (VM), але ви також можете використовувати команду jdb. Тож замість java MyApp ви б хотіли, як jdb MyApp (та інтерактивно налагоджуєте, встановлюйте точки прориву, бігайте, зупиняйтесь, дивіться тощо тощо)
OscarRyz

1
Я не думаю, що це правильно відповідно до сторінки jdb man - почати цитувати Ще один спосіб використання jdb - приєднати його до вже запущеної програми VM Java. VM, який має бути налагоджений у jdb, потрібно запустити з таких варіантів: - кінцева цитата
hhafez

За допомогою правильного роз'єму (поки що не підтримується) jdb може підключитися до запущеного процесу.
Thorbjørn Ravn Andersen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.