Отладка в Maven?

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

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

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

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

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

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

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

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

 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.

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

Для Maven <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 

Подробнее см. В MNG-2105 и « Работа с Eclipse-IDE» .

Я думал, что буду расширять эти ответы для пользователей 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 (содрогаться)

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

Ditto 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 (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 через Debug Configurations для localhost (любой хост) и порт 5005.

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

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

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

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

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

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

Как упоминалось Самуэлем с небольшой модификацией (set suspend = y вместо suspend = n, y означает yes, который приостанавливает программу и не запускает ее, чтобы вы могли установить контрольные точки для ее отладки, если 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

  • Как отладить программу MPI?
  • Прикрепить отладчик Intellij-IDEA к запущенному Java-процессу
  • Как найти, где исключение было выбрано на C ++?
  • Текущие возможности трассировки программы в C #?
  • Как определить, являются ли методы Apple асинхронными?
  • R строк строки сценария при ошибке?
  • Определить строку кода, которая вызывает ошибку сегментации?
  • В Visual Studio C ++, каковы представления распределения памяти?
  • Как отлаживать время ожидания ожидания ожидания ожидания на сервере MySQL?
  • Создание точки останова в Xcode для непризнанного селектора
  • Как использовать файлы PDB
  • Давайте будем гением компьютера.