Действительно ли возможно запустить отладчик, такой как 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) описала, как отладка работает. Я подозреваю, что должен использовать некоторый плагин.
Как 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.
Я думал, что подробно остановлюсь на этих ответах для 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 также. Можно включить его только, когда определенное исключение выдается, например. Можно запустить приостановленный или выполнение. Так или иначе.. Я отступаю.
Я нашел простой способ сделать, это -
Просто вводит команду как это -
>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
При использовании Netbeans существует хороший ярлык на это. Просто определите цель exec:java
и добавьте свойство jpda.listen=maven
, Протестированное на Netbeans 7.3
Если Вы не хотите быть зависимым 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 удаленный инструмент строки команды отладки
Если Вы используете Знатока 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.
Почему бы не использовать JPDA и присоединение к запущенному процессу от отдельного процесса отладчика? Необходимо смочь указать подходящие варианты в Знатоке для запуска процесса с включенными рычагами отладки. Эта статья имеет больше информации.
Я использую опцию MAVEN_OPTS и нахожу, что она полезный для установки приостанавливает к "suspend=y", поскольку мои exec:java программы имеют тенденцию быть маленькими генераторами, которые закончены, прежде чем я буду иметь, умеют присоединить отладчик.... :) С приостанавливают на нем, будет ожидать отладчика для присоединения перед проуступкой.