Невозможно отладить в Java с затмением - PullRequest
20 голосов
/ 20 сентября 2011

Я пытаюсь отладить простое Java-приложение на моей машине, используя Eclipse в качестве IDE.Когда я пытаюсь отладить приложение путем ввода перспективы отладки, я устанавливаю точку останова и запускаю отладку.В течение нескольких секунд появится следующее всплывающее окно:

Launching unicodeRead has encountered a problem. Cannot connect to VM.

Сообщение, выводимое на консоль, выглядит следующим образом:

ERROR: transport error 202: connect failed: Connection refused
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [../../../src/share/back/debugInit.c:708]
FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)  

Как мне исправить это?Почему это происходит?

Ответы [ 9 ]

26 голосов
/ 27 февраля 2012

У меня просто была такая же проблема.

Вчера все работало нормально, теперь ничего нет - та же ошибка, что и вы.Я узнал, что администраторы сети тем временем внесли некоторые изменения.Некоторые вещи брандмауэра.Проблема в том, что Eclipse пытается установить соединение с JVM на «localhost» (и некотором случайном порте).Когда я попытался пропинговать localhost (или 127.0.0.1), я получил следующее:

C:\Windows\system32>ping 127.0.0.1
Pinging 127.0.0.1 with 32 bytes of data:
PING: transmit failed. General failure.
PING: transmit failed. General failure.
PING: transmit failed. General failure.
PING: transmit failed. General failure.

и

C:\Windows\system32>ping localhost
Ping request could not find host localhost. Please check the name and try again.

Похоже, что в некоторых случаях DNS должен решить эту проблему, и если брандмауэрпредотвращает локальные запросы к DNS - вещи ломаются.Мне пришлось изменить файл hosts и удалить комментарии в следующих строках, поэтому я бы больше не полагался на DNS:

# 127.0.0.1       localhost
# ::1             localhost

Хотя написано, что изменения файла хостов вступают в силу немедленно, я думаю, что некоторые процессызаблокировал это и перезагрузка была необходима в моем случае.После этого все снова заработало.

4 голосов
/ 20 сентября 2011

Похоже, та же проблема, что и здесь . Перезагрузка компьютера исправила проблему там. Других решений я не нашел.

2 голосов
/ 15 мая 2018

Я обнаружил ошибку при использовании формата -X:

java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n myapp

Ошибка исчезла, когда я переключился на более новый формат:

java -agentlib:jdwp=transport=dt_socket,server=y,address=4000,suspend=n myapp
2 голосов
/ 10 декабря 2013

Это очень просто, просто выполните следующие изменения в файле eclipse.ini.

-vm
binary\com.sun.java.jdk.win32.x86_1.6.0.u43\jre\bin\javaw.exe
0 голосов
/ 27 апреля 2018

Для меня было решено удалить всю папку domain1 внутри папки domains в главной папке glassfish.Eclipse попросит вас воссоздать домен, после чего все снова заработает.

0 голосов
/ 03 февраля 2016

В моем случае у меня есть куча доменов, ссылающихся на 127.0.0.1 в файле hosts, например:

127.0.0.1 localhost domian1.local domain2.local domain3.local

однажды я добавил еще один новый домен для ссылки на 127.0.0.1. По ошибке я поставил домен перед "localhost", вот так:

127.0.0.1 domain4.local localhost domian1.local domain2.local domainx.local

После этого я всегда получал окно предупреждения в затмении во время отладки:

Не удается подключиться к виртуальной машине com.sun.jdi.connect.TransportTimeoutException

В консоли:

ОШИБКА: ошибка транспорта 202: ошибка подключения: соединение отклонено ОШИБКА: JDWP: не удалось инициализировать транспорт через localhost: 50470, пробовал localhost через 127.0.0.1:50470 ФАТАЛЬНАЯ ОШИБКА в собственном методе: JDWP Нет инициализированных транспортов, jvmtiError = AGENT_ERROR_TRANSPORT_INIT (197) ОШИБКА: ошибка транспорта 202: сбой подключения: соединение отклонено ОШИБКА: не удалось инициализировать транспортный JDWP dt_socket, TRANSPORT_INIT (510) Ошибка выхода из JDWP AGENT_ERROR_TRANSPORT_INIT (197): транспорт не инициализирован [../../../src/share/back/debugInit.c:690]

Решение - постоянно держать localhost на первой позиции.

127.0.0.1 localhost domian1.local domain2.local domainx.local domain4.local

0 голосов
/ 02 апреля 2014

Моя причина и решение были совершенно другими.
Я думаю, что в моем случае это было связано с установкой JProfiler. Я исправил это, удалив JProfiler и запустив Eclipse с опцией -clean. Я подозреваю, что JProfiler вставлял себя в отладчик. Опция -clean заставляет Eclipse переоценивать свои плагины, так что одного этого может быть достаточно.

0 голосов
/ 29 мая 2013

Я получал ту же ошибку на моей машине с Ubuntu из-за ошибки в файле / etc / hosts. Я прокомментировал сопоставление localhost с 127.0.0.1, и, чтобы еще больше усложнить ситуацию, вокруг висел файл подкачки.

Это была первая строка моего / etc / hosts:

127.0.0.1       #localhost

Удаление # решило проблему, тогда как перезагрузка по понятным причинам не имела.

0 голосов
/ 30 марта 2012

Продолжая ответ @ gonadarian, кажется, Eclipse использует порт 127.0.0.1 для целей отладки. Этот порт также называется localhost. Способ устранения этой ошибки - убедиться, что на указанных выше портах не запущены процессы или службы. Способ сделать это в Linux:

  1. Как root, введите команду:
    netstat -tulpn | grep 127.0.0.1

  2. Если на указанном порту выполняются процессы, он будет отображаться в формате:
    process_id/process name.

  3. Убить вышеперечисленные процессы следующим образом: kill -KILL process_id

  4. Перезагрузите компьютер, чтобы эти изменения вступили в силу. Ошибка больше не должна возникать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...