Обратите внимание, что существует два способа создания сеанса отладки (см. Документацию jdb ).
- Присоединение -Мы загружаем программу в виртуальную машину, она приостанавливает прослушивание порта (например, 8000).Затем в другом терминальном сеансе мы загружаем jdb и присоединяем его к сеансу JVM, указав порт.
- в одном терминальном сеансе:
java -Xdebug -agentlib:jdwp=transport=dt_socket,
address=8000,server=y,suspend=y ClassName
- во втором терминальном сеансе:
jdb -attach 8000
- Запуск - Загрузить jdb и сообщить имя класса для загрузки.
- в одном терминальном сеансе:
jdb ClassName
Если вы присоединяете , вам не нужно использоватьКоманда run
.
Однако, если вы запускаете , тогда вам do необходимо использовать команду run
(виртуальная машина еще не запущена).
Это поведение может быть выведено из man jdb
:
run - После запуска jdb
и установки любых необходимых точек останова используйте этукоманда для запуска выполнения отлаженного приложения. Эта команда доступна только тогда, когда jdb
запускает отлаженное приложение (в отличие от подключения к существующей виртуальной машине) .
Вот почему у вас появляется сообщение об ошибке.Вы запустили отладчик, но не использовали run command
.Некоторые учебные пособия могут неправильно указывать вам launch jdb, но не забудьте сказать вам, что нужно выполнить команду run
.
Ниже показано, как получить список методов (при условии, что выиметь main
метод в классе ClassName
).
Присоединение :
jdb -attach 8000
main[1] stop in ClassName.main
main[1] cont
main[1] methods ClassName
Запуск :
jdb ClassName
> stop in ClassName.main
> run
main[1] methods ClassName
Подсказка : посмотрите командную строку jdb.Иногда это >
, иногда это main[1]
.Если это >
, то виртуальная машина не запустилась и такие команды, как classes
, methods
не будут работать, пока вы не воспользуетесь командой run
.Если приглашение main[1]
, виртуальная машина была запущена, и нужные команды будут работать.
Единственное, что я могу сделать вывод, это то, что jdb ожидает, что вы установите слепые точки останова
Трудно установить точки прерывания, используя только отладчик.Вы должны смотреть на свой исходный код в другом месте.Скорее всего, вы будете знать имя хотя бы одного метода, на который нужно порвать, и, таким образом, установите начальную точку останова, используя stop in ClassName.MethodName
.Если вы не знаете, где выполнить разрыв, вы всегда можете установить точку останова для основного метода, используя stop in ClassName.Main
.Помните, что во время работы отладчика вы можете установить больше точек останова.Также, вы можете найти полезной команду list
- она показывает исходный код, соответствующий текущему достижению точки останова.