Maven에서 디버깅?
Maven에서 jdb와 같은 디버거를 시작할 수 있습니까? 프로젝트를 성공적으로 컴파일 하는 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)를 찾을 수 없습니다. 플러그인을 사용해야한다고 생각합니다.
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에 연결할 수 있습니다.
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 매버릭이 내 Java 개발 환경을 파괴 한 후 처음부터 시작하여이 게시물을 살펴보고 추가 할 것이라고 생각했습니다.
$ mvnDebug vertx:runMod
-bash: mvnDebug: command not found
DOH! Maverick을 설치할 때 새 SSD 드라이브 및 / 또는 모든 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
Ditto 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는 JVMTI (Java Virtual Machine Tools Interface)에서 사용하는 JVM에서 디버깅 기능을 활성화합니다. JVMTI는 디버거 및 프로파일 링 도구에서 사용하는 하위 수준 디버깅 인터페이스입니다.이를 통해 상태를 검사하고 실행을 제어 할 수 있습니다. JVM에서 실행되는 응용 프로그램. "
"The subset of JVMTI that is most typically used by profilers is always available. However, the functionality used by debuggers to be able to step through the code and set breakpoints has some overhead associated with it and is not always available. To enable this functionality you must use the -Xdebug option."
-Xrunjdwp:transport=dt_socket,server=y,suspend=n myApp
Check out the docs on -Xrunjdwp too. You can enable it only when a certain exception is thrown for example. You can start it up suspended or running. Anyway.. I digress.
I found an easy way to do this -
Just enter a command like this -
>mvn -Dtest=TestClassName#methodname -Dmaven.surefire.debug test
It will start listening to 5005 port. Now just create a remote debugging in Eclipse through Debug Configurations for localhost(any host) and port 5005.
Source - https://doc.nuxeo.com/display/CORG/How+to+Debug+a+Test+Run+with+Maven
If you are using Netbeans, there is a nice shortcut to this. Just define a goal exec:java
and add the property jpda.listen=maven
Tested on Netbeans 7.3
If you don't want to be IDE dependent and want to work directly with the command line, you can use 'jdb' (Java Debugger)
As mentioned by Samuel with small modification (set suspend=y instead of suspend=n, y means yes which suspends the program and not run it so you that can set breakpoints to debug it, if suspend=n means it may run the program to completion before you can even debug it)
On the directory which contains your pom.xml, execute:
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"
Then, open up a new terminal and execute:
jdb -attach 1044
You can then use jdb to debug your program!=)
Sources: Java jdb remote debugging command line tool
Why not use the JPDA and attach to the launched process from a separate debugger process ? You should be able to specify the appropriate options in Maven to launch your process with the debugging hooks enabled. This article has more information.
I use the MAVEN_OPTS option, and find it useful to set suspend to "suspend=y" as my exec:java programs tend to be small generators which are finished before I have manage to attach a debugger.... :) With suspend on it will wait for a debugger to attach before proceding.
참고URL : https://stackoverflow.com/questions/2935375/debugging-in-maven
'programing tip' 카테고리의 다른 글
.NET C #에서 전체 단어의 문자열 자르기 (0) | 2020.11.26 |
---|---|
Windows 7에서 git 사용 권한이 거부 됨 (공개 키) 오류 (0) | 2020.11.26 |
ProgressDialog에서 진행률 표시기를 쉽게 중앙에 배치하는 방법 (제목 / 텍스트가 전달되지 않은 경우) (0) | 2020.11.26 |
JQuery를 사용하여 : Before CSS 선택기의 너비 속성 변경 (0) | 2020.11.26 |
날짜 별 SQLite 주문 1530019888000 (0) | 2020.11.26 |