Налагодження програми 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.