在Maven中debugging?
是否有可能从Maven启动一个像jdb这样的debugging器? 我有一个pom.xml文件,成功编译项目。 然而,程序挂在某处,我真的想启动jdb或等价的debugging器,看看发生了什么。
我编译使用mvn compile
和启动使用:
mvn exec:java -Dexec.mainClass="com.mycompany.app.App"
我期待的是:
mvn exec:jdb -Dexec.mainClass="com.mycompany.app.App"
启动debugging器,但像往常一样,我的期望与maven的哲学是不一致的。
另外,我找不到任何文档(在Maven的网站或谷歌)来描述如何debugging工作。 我怀疑我必须使用一些插件。
就像Brian所说的,你可以使用远程debugging:
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中,你可以使用远程debugging,并将debugging器附加到localhost:1044。
如果您使用的是Maven 2.0.8+,请运行mvnDebug
命令代替mvn
并在端口8000上附加一个debugging器。
对于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开发环境之后,我从头开始写这篇文章,并且认为我会join它。
$ mvnDebug vertx:runMod -bash: mvnDebug: command not found
DOH! 当我安装Maverick时,在新的SSD驱动器和/或所有Java的重置之后,我还没有在这个盒子上设置它。
我使用OSX和Linux的包pipe理器,所以我不知道mvn真的在哪里生活。 (我知道短暂的时间..谢谢brew ..我喜欢,我不知道这一点。)
让我们来看看:
$ which mvn /usr/local/bin/mvn
在那里你是……你小@
现在你从哪里安装到:
$ 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 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"
所以你可以修改它(我通常debugging端口9090)。
本博客解释了如何设置Eclipse远程debugging(不寒而栗)
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启用了Java虚拟机工具接口(JVMTI)所使用的JVM中的debuggingfunction,JVMTI是debugging器和分析工具使用的低级debugging接口,可以检查状态并控制执行在JVM中运行的应用程序“。
“分析器最常用的JVMTI的子集总是可用的,但是debugging器能够遍历代码和设置断点的function有一些相关的开销,并不总是可用的。你必须使用-Xdebug选项。“
-Xrunjdwp:transport = dt_socket,server = y,suspend = n myApp
请查看-Xrunjdwp上的文档。 例如,只有在引发某个exception时才能启用它。 你可以启动它暂停或运行。 无论如何..我离题了。
我发现了一个简单的方法来做到这一点 –
只需input一个像这样的命令 –
>mvn -Dtest=TestClassName#methodname -Dmaven.surefire.debug test
它将开始收听5005端口。 现在只需通过本地主机(任何主机)和端口5005的Debug Configurations在Eclipse中创build一个远程debugging。
来源 – https://doc.nuxeo.com/display/CORG/How+to+Debug+a+Test+Run+with+Maven
如果您使用的是Netbeans,则有一个很好的捷径。 只需定义一个目标exec:java
并添加属性jpda.listen=maven
testingNetbeans 7.3
为什么不使用JPDA并从独立的debugging器进程连接到启动的进程? 您应该能够在Maven中指定相应的选项,以启用启用了debugging挂钩的进程。 这篇文章有更多的信息。
我使用MAVEN_OPTS选项,并发现它是有用的悬挂设置为“suspend = y”作为我的exec:java程序往往是小型发电机,我已经设法附加debugging器之前完成…. :)随着暂停它将等待debugging器附加,然后再继续。
如果你不想成为依赖IDE的,并想直接使用命令行,你可以使用'jdb'(Java Debugger)
正如Samuel所提到的那样,通过小的修改(设置suspend = y而不是suspend = n,y意味着是挂起程序并且不运行,所以你可以设置断点来debugging它,如果suspend = n意味着它可以运行程序完成之前,你甚至可以debugging它)
在包含您的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"
然后,打开一个新的terminal并执行:
jdb -attach 1044
然后你可以使用jdb来debugging你的程序!=)
来源: Java jdb远程debugging命令行工具
- VS代码:“由于生成的代码未find而忽略断点”错误
- 如何在Visual Studio代码(VSCode)上运行或debuggingPHP
- Chrome浏览器JavaScriptdebugging – 如何保存页面刷新或通过代码中断之间的断点?
- 如何在Chrome中安装Flashdebugging播放器?
- 在GDB中运行应用程序,直到发生exception
- 为什么这个循环在某些平台上退出,而不是在其他平台上退出?
- 在Chrome中的Javascript执行跟踪 – 如何?
- 在Microsoft Visual Studiodebugging器中更改DateTime
- VS.NET 2010中的exception窗口缺less“User-unhandled”列