Отладка в знатоке?

Действительно ли возможно запустить отладчик, такой как jdb от Знатока? У меня есть файл pom.xml, который компилирует проект успешно. Однако программа зависает где-нибудь, и я действительно хотел бы запустить jdb или эквивалентный отладчик для наблюдения то, что происходит.

Я компилирую использование mvn compile и использование запуска:

mvn exec:java -Dexec.mainClass="com.mycompany.app.App"

Я ожидал что-то как:

mvn exec:jdb -Dexec.mainClass="com.mycompany.app.App"

для запуска отладчика, но, как обычно, мои ожидания инконгруэнтны с философией знатока.

Кроме того, я не мог найти, что любая документация (на веб-сайте Знатока или Google) описала, как отладка работает. Я подозреваю, что должен использовать некоторый плагин.

62
задан 5 November 2013 в 00:01

8 ответов

Как Brian сказал, можно использовать удаленную отладку:

mvn exec:exec -Dexec.executable="java" -Dexec.args="-classpath %classpath -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044 com.mycompany.app.App"

Затем в Вашем затмении, можно использовать удаленную отладку и присоединить отладчик к localhost:1044.

32
ответ дан 31 October 2019 в 13:14

Я думал, что подробно остановлюсь на этих ответах для OSX и людей Linux (не, что им нужен он):

я предпочитаю использовать mvnDebug также. Но после того, как индивидуалист OSX уничтожил мой Java dev среда, я запускаю с нуля и stubbled на это сообщение и думал, что добавлю к нему.

$ mvnDebug vertx:runMod
-bash: mvnDebug: command not found

DOH! Я не настроил его на этом поле после нового твердотельного диска и/или сброса всего Java, когда я установил Индивидуалиста.

я использую диспетчер пакетов для OSX и Linux, таким образом, я понятия не имею, где mvn действительно живет. (Я знаю в течение кратких промежутков времени.. спасибо варево.. Мне нравится этот, я не знаю это.)

Позволяют нам видеть:

$ which mvn
/usr/local/bin/mvn

Там Вы-... Вы мало b@stard.

Теперь, где, Вы установлены на:

$ ls -l /usr/local/bin/mvn

lrwxr-xr-x  1 root  wheel  39 Oct 31 13:00 /
                  /usr/local/bin/mvn -> /usr/local/Cellar/maven30/3.0.5/bin/mvn

Ага! Таким образом, Вы были установлены в/usr/local/Cellar/maven30/3.0.5/bin/mvn. Вы развязный небольшой инструмент сборки. Несомненно домашним пивом...

у Вас есть свой маленький приятель mvnDebug с Вами?

$ ls /usr/local/Cellar/maven30/3.0.5/bin/mvnDebug 
/usr/local/Cellar/maven30/3.0.5/bin/mvnDebug

Хороший. Хороший.Очень хорошо. Все движение как запланировано.

Теперь перемещение, что мало b@stard, где я могу помнить его более легко.

$ ln -s /usr/local/Cellar/maven30/3.0.5/bin/mvnDebug /usr/local/bin/mvnDebug
  ln: /usr/local/bin/mvnDebug: Permission denied

Штопка Вы компьютер... Вы отправите моему желанию. Вы знаете, кто я? Я - SUDO! ПОКЛОНИТЕСЬ!

$ sudo ln -s /usr/local/Cellar/maven30/3.0.5/bin/mvnDebug /usr/local/bin/mvnDebug

Теперь я могу использовать его от Eclipse (, но почему был бы я делать это, когда у меня есть IntelliJ!!!! )

$ mvnDebug vertx:runMod
Preparing to Execute Maven in Debug Mode
Listening for transport dt_socket at address: 8000

Внутренне mvnDebug использует это:

MAVEN_DEBUG_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE  \
-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000"

, Таким образом, Вы могли изменить его (я обычно отлаживаю на порте 9090).

Этот блог объясняет, как установить Eclipse удаленная отладка (дрожь)

http://javarevisited.blogspot.com/2011/02/how-to-setup-remote-debugging-in.html

Так же Netbeans

https://blogs.oracle.com/atishay/entry/use_netbeans_to_debug_a

Так же, IntelliJ http://www.jetbrains.com/idea/webhelp/run-debug-configuration-remote.html

Здесь является некоторыми хорошими документами о команде-Xdebug в целом.

http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html

"-Xdebug включает возможности отладки в JVM, которые используются Интерфейсом инструментов виртуальной машины Java (JVMTI). JVMTI является низкоуровневым интерфейсом отладки, используемым отладчиками и профильными инструментами. С ним можно осмотреть состояние и управлять выполнением приложений, работающих в JVM. "

"Подмножество JVMTI, который, как правило, используется профилировщиками, всегда доступно. Однако функциональность, используемая отладчиками, чтобы смочь ступить через код и установить точки останова, имеет немного служебные связанный с ним и не всегда доступна. Для добавления этой функциональности, необходимо использовать-Xdebug опцию".

-Xrunjdwp:transport=dt_socket,server=y,suspend=n myApp

Выезд документы о-Xrunjdwp также. Можно включить его только, когда определенное исключение выдается, например. Можно запустить приостановленный или выполнение. Так или иначе.. Я отступаю.

21
ответ дан 31 October 2019 в 13:14

Я нашел простой способ сделать, это -

Просто вводит команду как это -

>mvn -Dtest=TestClassName#methodname -Dmaven.surefire.debug test

Это начнет слушать 5 005 портов. Теперь просто создайте удаленную отладку в Eclipse через Настройки отладочного процесса для localhost (любой хост) и порт 5005.

Источник - https://doc.nuxeo.com/display/CORG/How+to+Debug+a+Test+Run+with+Maven

13
ответ дан 31 October 2019 в 13:14

При использовании Netbeans существует хороший ярлык на это. Просто определите цель exec:java и добавьте свойство jpda.listen=maven Netbeans screenshot

, Протестированное на Netbeans 7.3

8
ответ дан 31 October 2019 в 13:14

Если Вы не хотите быть зависимым IDE и хотеть работать непосредственно с командной строкой, можно использовать 'jdb' (Отладчик Java)

, Как упомянуто Samuel с маленькой модификацией (установите suspend=y вместо suspend=n, y означает да, который приостанавливает программу и не выполняет ее так Вы, которые могут установить точки останова для отладки ее, если suspend=n означает, что она может запустить программу к завершению, прежде чем можно будет даже отладить ее)

На каталоге, который содержит pom.xml, выполнитесь:

mvn exec:exec -Dexec.executable="java" -Dexec.args="-classpath %classpath -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=1044 com.mycompany.app.App"

Затем откройте новый терминал и выполнитесь:

jdb -attach 1044

можно затем использовать jdb для отладки программы! =)

Источники: Java jdb удаленный инструмент строки команды отладки

4
ответ дан 31 October 2019 в 13:14

Если Вы используете Знатока 2.0.8 +, выполняете эти mvnDebug команда вместо mvn и присоединяете отладчик на порте 8000.

Для Знатока < 2.0.8, не прокомментируйте следующую строку в Вашем %M2_HOME%/bin/mvn.bat (и возможно сохраните измененную версию как mvnDebug.bat):

@REM set MAVEN_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
[еще 119] детали в MNG-2105 и Контакт с основанным на Eclipse IDE.

100
ответ дан 31 October 2019 в 13:14

Почему бы не использовать JPDA и присоединение к запущенному процессу от отдельного процесса отладчика? Необходимо смочь указать подходящие варианты в Знатоке для запуска процесса с включенными рычагами отладки. Эта статья имеет больше информации.

3
ответ дан 31 October 2019 в 13:14

Я использую опцию MAVEN_OPTS и нахожу, что она полезный для установки приостанавливает к "suspend=y", поскольку мои exec:java программы имеют тенденцию быть маленькими генераторами, которые закончены, прежде чем я буду иметь, умеют присоединить отладчик.... :) С приостанавливают на нем, будет ожидать отладчика для присоединения перед проуступкой.

3
ответ дан 31 October 2019 в 13:14

Другие вопросы по тегам:

Похожие вопросы: