Удаленная отладка Tomcat с помощью Eclipse

95

Кажется, я не могу отлаживать приложение tomcat через Eclipse. Я установил

CATALINA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n

а затем я бегу bin/catalina.sh, где я вижу выход сказать , что это прослушивание для dt_socketна port 8000. Но всякий раз, когда я пытаюсь подключиться к порту 8000в Eclipse (путем добавления записи в меню удаленного Java-приложения), он жалуется на отказ в подключении. Любые идеи?

Виктор
источник
не могли бы вы опубликовать свою удаленную конфигурацию, используемую в eclipse.
Шон

Ответы:

133

Вы можете проверить, работает ли это?

JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"

catalina.sh jpda start
Рагурам
источник
4
Собственно, твоя это исправила. Eclipse на самом деле ничего не говорит при успешном подключении, и повторное подключение вызывает ошибку. Так что это сработало, но я просто не заметил.
победитель
18
Это для тех, кто работает в ОС Windows:set JPDA_OPTS=-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n catalina.bat jpda start
Ли Чи Киам,
1
Что делает опция suspend = n?
Trismegistos
2
@Trismegistos. suspendуказывает, должен ли jvm ждать отладчика или продолжить. См. Этот документ .
Raghuram
9
Собственно catalina.sh jpda startдолжно хватить. В catalina.sh есть пара JPDA_*параметров, которые можно использовать, например, для изменения порта, см. Документацию в файле.
zpon
53

Я потратил на это некоторое время, чтобы получить нужную информацию.

Итак, вот пошаговая подробная информация.

Окружающая среда: Windows 7

Версия TomCat: 7.0

IDE: Eclipse

Конфигурации, которые необходимо добавить для включения удаленной отладки с помощью Tomcat:

-Xdebug
-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n

Я не рекомендую вышеуказанную конфигурацию для среды, отличной от Windows. Чтобы добавить указанную выше конфигурацию, дважды щелкните сервер tomcat, который будет доступен в представлении сервера. Найдите снимок экрана ниже. введите описание изображения здесь

Теперь добавьте указанную выше конфигурацию среды выполнения в tomcat. Для этого проверьте скриншот ниже.

введите описание изображения здесь

Теперь переходим на вкладку Arugments в свойствах редактирования конфигурации запуска, как показано на снимке экрана ниже.

введите описание изображения здесь

В разделе аргументов GoTo VM добавьте эти строки.

-Xdebug

-agentlib: jdwp = transport = dt_socket, address = 8000, server = y, suspend = n

введите описание изображения здесь

Теперь добрался до кнопки отладки, доступной на панели инструментов eclipse.

введите описание изображения здесь

В настройках отладки найдите «Удаленное Java-приложение» и дважды щелкните по нему.введите описание изображения здесь

В поле Имя введите любое имя, которое хотите.

В поле проекта с помощью кнопки обзора выберите проект, для которого вы хотите выполнить удаленную отладку.

Имя хоста - это не что иное, как адрес хоста. Здесь я работаю локально, так что это "localhost".

В последнем столбце «Порт» значение должно быть 8000. Помимо текстовых полей «Имя» и «Проект» два других столбца «Хост» и «порт» будут заполнены самим eclipse, если вы не укажете указанные значения. Проверьте снимок экрана для информации.введите описание изображения здесь

Теперь щелкните правой кнопкой мыши TomcatServer в консоли сервера и выберите Добавить и удалить из контекстного меню. В этом диалоговом окне вы можете добавить проект на сервер.

Теперь запустите сервер Tomcat.

введите описание изображения здесь

Теперь запустите TomCatDebugConfiguration из Debug Tool.

В последний раз откройте внутренний или внешний браузер и запустите свой проект. Если управление выполнением достигло точек останова, затмение запросит перспективу отладки.

Рави MCA
источник
47

В каталоге bin tomcat, где находится catalina.batили .sh(он же {CATALINA_BASE} / bin), отредактируйте (создайте, если нет):

setenv.bat/.sh

Добавьте следующую строку:

CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

Это все, что вам нужно сделать, вам не нужно редактировать catalina.bat(или .sh) файл.

Смотрите комментарии в catalina.batили catalina.sh.

Возможно, вам придется настроить синтаксис для вашей конкретной среды / ситуации. Например, если у вас уже определена CATALINA_OPTS, вы можете сделать что-то вроде этого (в среде Windows):

set CATALINA_OPTS=%CATALINA_OPTS% -Xdebug -Xrunjdwp:transport=dt_socket,address=8088,server=y,suspend=n

Для отладки из Eclipse:

запустить-> Конфигурации отладки ...-> Удаленное приложение Java-> Создать

и укажите имя, проект, который вы отлаживаете, а также хост Tomcat и порт отладки, указанные выше.

Карл
источник
Это работает, вам нужно будет установить этот CATALINA_OPTS в setenv.sh, который находится в каталоге tomcat / bin. Спасибо.
Амит Кумар,
1
В моем setenv.bat это был JAVA_OPTS (tomcat 7)
vikingsteve 01
Здравствуйте, Филип, добавил несколько примечаний, которые могут помочь, если нет: какие версии os, tomcat и eclipse вы используете?
Карлу
в setenv.bat в binдиректории поместить строку , как set JPDA_OPTS= -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n, использование startup.batдля запуска Tomcat
Paramvir Singh Карвал
33

В catalina.batфайле, пожалуйста, измените ниже.

  • Шаг 1: CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

  • Шаг 2: JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"

  • Шаг 3: Запустите Tomcat из командной строки, как показано ниже: catalina.sh jpda start

  • Шаг 4: Затем в eclipse создайте конфигурацию отладки

    1. Дайте любое имя конфигурации.
    2. Дайте project name.
    3. Укажите тип подключения как Standard(Socket Attach)
    4. хост как localhost
    5. порт как 8000(или любой номер порта, но он должен быть таким же и в других местах).
RAJ
источник
Я нашел CATALINA_OPTS в следующих частях на catalina.bat: doStop shift set ACTION = stop set CATALINA_OPTS = goto execCmd: doConfigTest shift set ACTION = configtest set CATALINA_OPTS = goto execCmd где его редактировать? Вы можете просто загрузить содержимое вашего catalina.bat?
Gopakumar NG
Похоже, вы пишете одно и то же дважды. Я пропустил ваш шаг 1 - и он работает. Вы можете подтвердить, что нет необходимости изменять CATALINA_OPTS?
Генри Алони
для разницы между см. CATALINA_OPTS и JPDA_OPTS см .: stackoverflow.com/questions/11222365/…
Майк Р.
1
Это не будет работать в Tomcat 8. Чтобы это работало в Tomcat 8, вы должны пропустить шаг 1.
Дэйв
@RAJ. Это полностью работало в Tomcat 6. Большое спасибо.
T8Z
7

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

JPDA_OPTS = "- agentlib: jdwp = transport = dt_socket, address = 10.1.1.33 : 8000, server = y, suspend = n"

catalina.sh jpda start

Обратите внимание, что теперь адрес 10.1.1.33 : 8000.

Конечно, вы также можете проверить, какой IP-адрес действительно используется, запустив

netstat -an

как в Windows, так и в Linux и отфильтруйте порт с помощью find(Windows) или grep(Linux).

DAB
источник
Я думаю, вы имеете в виду, какой ПОРТ фактически используется, а не какой IP .
Абдолла
1
Нет, я имею в виду «IP-адрес». Если вы выполняете удаленную отладку (с другого компьютера), вам необходимо указать IP-адрес, отличный от localhost или 127.0.0.1. Конечно, вам всегда понадобится номер порта.
DAB
5

Просто запустите ./catalina.sh jpda start(разветвляется) или ./catalina.sh jpda run(не разветвляется, не упоминается в справке). Все упомянутые здесь параметры по умолчанию имеют нормальные значения.

атаманроман
источник
5

Позвольте мне рассказать о простом способе включения режима удаленной отладки в tomcat7 с помощью eclipse (Windows).

Шаг 1: откройте файл bin / startup.bat
Шаг 2: добавьте следующие строки для отладки с опцией JDPA (это должна быть начальная строка файла)

    set JPDA_ADDRESS=8000  
    set JPDA_TRANSPORT=dt_socket  

Шаг 3: в том же файле .. перейдите в конец файла, измените эту строку -

    call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%  
    instead of line  
    call "%EXECUTABLE%" start %CMD_LINE_ARGS%  

Шаг 4: затем просто запустите bin> startup.bat (теперь ваш сервер tomcat работает в удаленном режиме с портом 8000).

Шаг 5: после этого давайте подключим ваш исходный проект с помощью eclipse IDE с удаленным клиентом.

step6: В Eclipse IDE перейдите в «Конфигурация отладки»

step7: нажмите «удаленное Java-приложение» и затем нажмите «Создать»

шаг8. во вкладке "подключение" установите значение параметра

   project= your source project  
   connection Type: standard (socket attached)   
   host: localhost  
   port:8000  

Шаг 9: нажмите «Применить» и отладить.

Итак, наконец, ваш удаленный клиент eclipse подключен к работающему серверу tomcat (режим отладки).

Надеюсь, этот подход может вам помочь.

С уважением..

Mayen
источник
4

Измените catalina.bat, чтобы добавить

set JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n" 

и

CATALINA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n

Необязательно: добавьте строку ниже для запуска режима отладки по умолчанию при запуске startup.bat

call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%

Eclipse или STS выберите конфигурацию отладки, щелкните правой кнопкой мыши -> новый

connection type -> Standard socket Attach
Port -> 8000 (as given in the CATALINA_OPTS)
Host -> localhost or IP address
Шерми
источник
Эта информация предназначена для WINDOWS, но я случайно оказался в Windows, и это мне помогло. Спасибо!
Ring
2

Если по-прежнему все вышеперечисленное не работает, вы всегда можете добавить в скрипт

    set "JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
Шахар
источник
2

В tomcat 7 в catalina.sh есть этот код:

if [ "$1" = "jpda" ] ; then
  if [ -z "$JPDA_TRANSPORT" ]; then
    JPDA_TRANSPORT="dt_socket"
  fi
  if [ -z "$JPDA_ADDRESS" ]; then
    JPDA_ADDRESS="8000"
  fi
  if [ -z "$JPDA_SUSPEND" ]; then
    JPDA_SUSPEND="n"
  fi
  if [ -z "$JPDA_OPTS" ]; then
    JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
  fi
  CATALINA_OPTS="$CATALINA_OPTS $JPDA_OPTS"
  shift
fi

Ii подразумевает, что вы можете настроить JPDA с помощью:

export JPDA_TRANSPORT=dt_socket
export JPDA_ADDRESS=8000
export JPDA_SUSPEND=n

Или с:

JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"

И, наконец, используйте:

catalina.sh jpda start

С уважением

Марсело Салазар
источник
Tomcat 8: переменные JPDA_ можно установить в setenv.sh без необходимости их «экспортировать». В любом случае первым параметром вызова при запуске должен быть jpda. Если вы запускаете tomcat как службу, лучше всего изменить сценарий $ {CATALINA_HOME} /bin/startup.sh, добавив параметр 'jpda' в последнюю строку перед 'start': ´exec "$ PRGDIR" / "$ EXECUTABLE "jpda start" $ @ "´´.
Хери
1

Я столкнулся с этой проблемой при запуске Tomcat внутри контейнера Docker. Чтобы исправить это, убедитесь, что вы добавили аргумент '-p 8000: 8000' в команду запуска докера, чтобы открыть этот порт для вашего локального компьютера. Вам, конечно же, понадобится файл setenv.sh в вашем $ {CATALINA_HOME} / bin / в вашем контейнере.

Cheen
источник
0

Изменение startup.bat с помощью CATALINA_OPTS И JPDA_OPTS у меня не сработало, но добавление их в catalina.bat помогло

  1. Измените catalina.bat

CATALINA_OPTS = "- Xdebug -Xrunjdwp: transport = dt_socket, address = 8000, server = y, suspend = n"

JPDA_OPTS = "- agentlib: jdwp = transport = dt_socket, address = 8000, server = y, suspend = n"

  1. Измените startup.bat, чтобы включить jpda.

изменить вызов "% EXECUTABLE%" start% CMD_LINE_ARGS% на

вызвать "% EXECUTABLE%" jpda start% CMD_LINE_ARGS%

Затем настройте удаленное Java-приложение в настройках отладки в Eclipse.

Дэвид Стейблфорт
источник
0

Прежде всего, если вы откроете catalina.bat с помощью текстового редактора, вы увидите, что: «Не устанавливайте переменные в этом скрипте…» Поэтому никогда не меняйте их в этом скрипте, вместо этого вы можете выполнить следующие шаги:

  1. Он советует вам создать новый bat-файл с именем "setenv.bat".
  2. Затем установите 2 переменные в этом файле bat, например:

    set CATALINA_OPTS = "- Xdebug -Xrunjdwp: transport = dt_socket, address = 8000, server = y, suspend = n"

    установить JPDA_OPTS = "- agentlib: jdwp = transport = dt_socket, address = 8000, server = y, suspend = n"

  3. Наконец, запустите это в cmd, что: "catalina.bat jpda start"

  4. В среде IDE создайте конфигурацию удаленной отладки и установите для хоста соответствующий IP-адрес сервера и порт 8000.

Мустафа Кемаль
источник
0

Для версии apache-tomcat-8.5.28 просто сделайте это,

catalina.bat jpda start

Поскольку настройки по умолчанию уже настроены для нас в catalina.bat как

если не "% JPDA_OPTS%" == "" goto gotJpdaOpts установить JPDA_OPTS = -agentlib: jdwp = transport =% JPDA_TRANSPORT%, address =% JPDA_ADDRESS%, server = y, suspend =% JPDA_SUSPEND%

Так что никакой другой конфигурации не требуется. И когда вы выполните команду catalina.bat jpda start, вы увидите, что порт отладки 8000 открыт.

Лью и Эдвинсон
источник
-2

Для apache-tomcat-8.5.28

измените, JDPA_OPTSкак показано ниже, затем запустите какcatalina.bat jpda start

JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=8000,server=y,suspend=$JPDA_SUSPEND"
Мадху К.
источник