Отладка в 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), чтобы описать, как работает отладка. Я подозреваю, что мне нужно использовать какой-то плагин.
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 foundDOH! Я не настроил его на этом поле после нового 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 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