it-swarm.com.ru

Невозможно отладить в Java с затмением

Я пытаюсь отладить простое приложение 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)  

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

20
Sriram

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

Вчера все работало нормально, теперь ничего - ошибка та же, что вы дали. Я узнал, что сетевые администраторы сделали некоторые изменения за это время. Некоторые вещи брандмауэра. Проблема в том, что 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

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

24
gonadarian

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

4
Maza89

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

-vm
binary\com.Sun.Java.jdk.win32.x86_1.6.0.u43\jre\bin\javaw.exe
2
Calix

Я видел ошибку при использовании формата -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
1
user674669

В моем случае у меня есть куча доменов, ссылающихся на 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

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

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

В консоли:

ОШИБКА: транспортная ошибка 202: ошибка подключения: соединение отклонено ОШИБКА: JDWP: не удалось инициализировать транспорт через localhost: 50470, пробовал localhost через 127.0.0.1:50470 ФАТАЛЬНАЯ ОШИБКА в собственном методе: JDWP Нет инициализированных транспортов, jvmtiError = AGENT_ERROR_TRANSPORT_INIT (197) ОШИБКА: транспортная ошибка 202: ошибка подключения: соединение отклонено ОШИБКА: не удалось инициализировать транспортный dt_socket JDWP, 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
Willie Z

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

0
Carlos ABS