Отладка в Maven?



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



я компилирую с помощью mvn compile и пуск через:



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


Я ожидал что-то вроде:



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


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



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

713   8  

8 ответов:

как и сказал Брайан, вы можете использовать удаленную отладку:

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"

затем в eclipse можно использовать удаленную отладку и подключить отладчик к localhost:1044.

если вы используете Maven 2.0.8+, запустите на месте mvn и прикрепите отладчик на порт 8000.

для Maven %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

Подробнее MNG-2105 и работа с IDE на основе Eclipse.

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

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

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

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

я использую пакет менеджер для 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 ln -s /usr/local/Cellar/maven30/3.0.5/bin/mvnDebug /usr/local/bin/mvnDebug
  Password:

теперь я могу использовать его из 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 remote debugging (shudder)

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 Virtual Machine Tools Interface (JVMTI). JVMTI-это низкоуровневый интерфейс отладки, используемый отладчиками и средства профилирования. С его помощью можно проверять состояние и контролировать выполнение приложений, запущенных в JVM."

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

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

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

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

просто введите такую команду -

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

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

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

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

протестировано на Netbeans 7.3

Почему бы не использовать JPDA и прикрепить к запущенному процессу из отдельного процесса отладчика ? Вы должны иметь возможность указать соответствующие параметры в Maven для запуска процесса с включенными отладочными крючками. в этой статье более подробную информацию.

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

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

Как упоминалось Сэмюэлем с небольшой модификацией (set 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 remote debugging command line tool

Comments

    Ничего не найдено.