我想我会为 OSX 和 Linux 人员扩展这些答案(不是他们需要它):
我也更喜欢使用 mvnDebug。但是在 OSX maverick 破坏了我的 Java 开发环境之后,我从头开始,偶然发现了这篇文章,并认为我会添加它。
$ mvnDebug vertx:runMod
-bash: mvnDebug: command not found
DOH!在新的 SSD 驱动器和/或在我安装 Maverick 时重置所有 Java 之后,我没有在这个盒子上设置它。
我使用 OSX 和 Linux 的包管理器,所以我不知道 mvn 的真正位置。
(我知道很短一段时间.. 谢谢 brew.. 我喜欢我不知道这个。)
让我们看看:
$ 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
现在我可以在 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 上的文档。例如,您只能在抛出某个异常时启用它。您可以启动它暂停或运行。无论如何..我离题了。