Отладка Java-процесса с использованием IntelliJ - подключается к сокету, но не к целевой ВМ - PullRequest
2 голосов
/ 12 июля 2011

Теперь решено - см. Конец вопроса.

Я пытаюсь отладить процесс Java с помощью отладчика IntelliJ Community Edition.Сокет прослушивает - но когда я пытаюсь подключиться, процесс отладки показывает следующее: «Подключение к целевой ВМ, адрес:«: 8003 », транспорт:« сокет ». Он никогда не устанавливает соединение с ВМ, и я не могу отладить.

Я перешел на 64-битный ПК с Windows 7 - на моем старом компьютере с XP и смог подключить и отладить этот процесс Java (это приложение, которое я создаю и поддерживаю).

Это не дает сбоястандартная ошибка «Отказ в соединении: соединиться», которую вы получите, если не будет никакого процесса для подключения.Netstat также показывает, что порт слушает, когда приложение работает.

TCP 0.0.0.0:8003: 0 LISTENING

Отладка аргументов для приложения -Xrunjdwp: transport = dt_socket, server = y,suspend = n, address = 8003 -Xdebug

Если я попытаюсь запустить сеанс отладки из IntelliJ на удаленной машине, я могу подключиться к процессу, выполняющемуся на моей локальной машине, и выполнить отладку.Если я запускаю приложение Java на удаленном компьютере и использую IntelliJ на своем локальном компьютере, я могу выполнить отладку.Только если я запускаю и отлаживаю на одной и той же машине, она выходит из строя - к сожалению, это то, что мне нужно делать почти все время.

Единственные похожие проблемы, которые я обнаружил, относятся к 2004 году и связаны с файломпути с пробелами, и были NetBeans, а не IntelliJ.Я перестроил и перезапустил свое приложение, не допуская ни пробелов, ни подчеркиваний в пути, ни радости.

Мои настройки отладки intelliJ - отладка моей локальной машины через сокет, порт режима подключения 8003 - извините, как новый пользователь, я могуНе прикрепляйте изображение.

Другие попытки:

  • Изменение версий JRE
  • Отладка с использованием общей памяти вместо транспорта сокетов
  • Я не переустанавливал IntelliJ - я использую ту же сборку, что и мои коллеги-разработчики (10.5 IC 107-105), у которых нет этой проблемы.
  • Изменение порта, который прослушивает процесс отладки (с 8003на другие, неиспользуемые в соответствии с netstat)
  • Я пытался использовать имя компьютера, IP-адрес и «localhost» для ссылки на ПК в настройках отладки.

Застрял.Любая помощь очень ценится.
Спасибо, Стив

Решено

Что ж, день, когда не удается решить, тогда я нахожу ответ через 20 минут после публикации.Недопустимый символ подписи JNI, обнаруженный только при отладке.Решается добавлением этого аргумента при отладке.

-Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize = true

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6547438

Спасибо запомощь.До сих пор не знаю, почему это будет работать при удаленной отладке, но не локально.

1 Ответ

1 голос
/ 12 июля 2011

Звучит как странная проблема с брандмауэром.

Похоже, у вас должна быть возможность попробовать telnet localhost 8003, и она не удастся. Это означает, что ничто не может подключиться к вашему приложению через этот порт.

РЕДАКТИРОВАТЬ: если совместно используемая память работает, и вы не можете подключить ее через telnet, есть проблема с тем, как вы запускаете приложение.

Вы получите этот тип ошибки, если приложение не запущено.

Можете ли вы попробовать отладить простую программу из IntelliJ, которую вы используете?

...