新接手的项目采用的是Maven作为编译管理工具,项目内容则是按子模块Module来划分。由于模块太多,且都比较大(基本上都能独立运行并负责处理一方面的业务),并采用Socket来进行模块之间的数据通信,结果就导致一个略显臃肿的系统产生了。最重要的是,不知道maven的pom.xml文件出了什么问题,Eclipse也一直无法成功加载部分重要模块(以致最后切换到JetBrain IDEA(Open Source)——这也算是一点收获),常用的调试方式也行不通了。过了好一段时间我才习惯,每次提交代码前都要小心翼翼地检查一遍。
昨天让同事帮我做CodeReview,讨论问题中,看着他演示一下Remote Debug。觉得很神奇,回来试了一下,又加了点资料,才发觉得我真的是Out了。以下内容是个简单的笔记,关于在JetBrain IDEA中使用Remote Debug的方式。
要想Debug,首先得需要在编译时打开debug选项,这样生成的class文件才能支持debug过程。其次,RemoteDebug过程是在两个不同的VM实例间进行了,这就得需要一个通信方式了。常用的是Socket了!因此设置中会涉及到一些端口设置的。
在启动程序时,将以下参数选项添加到自定义的命令行中,程序就会以支持RemoteDeubg的方式启动。
-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=2345
例如:
JVM_OPTS="-server -Xss128k -XX:+UseParNewGC -XX:+HandlePromotionFailure -XX:+HeapDumpOnOutOfMemoryError"
DEBUG="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=2345"
JVM_OPTS="$JVM_OPTS $DEBUG"
$JAVA_HOME/bin/java $JVM_OPTS -cp $CP com.romebuild.Main
准备程序之后,再配置一下IDE,让它去访问远程的VM了。过程相当简单!
【Run】|【Edit Configuration】,选择【Add New Configuration】|【Remote】,便生成了一个RemoteDebug配置,其中的参数不用修改,但需要设置目标VM实例所在的主机与监听的端口。本例则为localhost:2345了。再选择与目标实例对应的模块代码就可以了。
点击调试按钮,IDEA就会连接到目标VM上去了,调试方法就不用多说了吧。下面来说明一下DEBUG选项参数的意思:
-XDebug 启用调试
-Xrunjdwp 加载JDWP的JPDA参考执行实例。
transport 用于在调试程序和 VM 使用的进程之间通讯。
dt_socket 套接字传输。
server=y/n VM是否需要作为调试服务器执行。
address=2345调试服务器监听的端口号。
suspend=y/n 是否在调试客户端建立连接之后启动 VM 。
关于suspend多说一句,如果设置为y,它会阻塞程序运行,直到有客户端连接到对应的监听端口(这里是9527),程序才真正开始执行。我们有时候会抱怨程序一闪而过,还没来得及在本地加载上代码程序就执行完了,这种情况就可以使用suspend参数。
还有一个细节是-jar参数不能写到-Xug参数前,像这样无法启用调试:
java -jar lib/Main.jar -Xdebug -Xrunjdwp:transport=dt_socket,address=9527,server=y,suspend=y
要远程调试maven2启动的程序,例如mvn jetty:run,可以在启动程序时执行命令:export MAVEN_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=y"
分享到:
相关推荐
如果你发现你的代码在本地运行良好,但是一旦上测试环境、预发布环境或生产环境就出现问题,那么可以执行JAVA远程调试,以彻底搞清楚为什么一上生产环境就会出现问题,本教程就是介绍如何实现JAVA远程调试,即如何在...
java远程调试操作步骤
Java远程调试
使用JPDA进行Java程序远程调试使用JPDA进行Java程序远程调试使用JPDA进行Java程序远程调试使用JPDA进行Java程序远程调试
自己写的介绍java远程调试的ppt。有jvm的调试模型,eclipse的调试技巧,远程调试介绍,环境搭建。并有一个demo演示截图。
JAVA远程调试.txt
解决Failed to connect to remote VM com.sun.jdi.connect.spi.ClosedConnectionException错误,tomcat远程调试
JavaEclipse远程调试,在实际环境进行调试,可以定位到许多莫名其妙的环境问题。
JAVAECLIPSE下配置WINDCHILL远程调试WINDCHILL学习笔记.pdf
java 远程调试 一个朋友推荐,平时收集,希望能给需要帮助的人提供便利
java开发如何进行远程调试远程服务器,在远程服务器上设置断点 本机设置断点调试大家都会,那如何在远程服务器上设计断点调试.今天我来教大家,JAVA远程调试断点技术
远程调试快捷键
使用 Eclipse 远程调试 Java 应用程序使用 Eclipse 远程调试 Java 应用程序使用 Eclipse 远程调试 Java 应用程序使用 Eclipse 远程调试 Java 应用程序使用 Eclipse 远程调试 Java 应用程序使用 Eclipse 远程调试 ...
针对springboot jar方式启动的远程调试, 不用本地启动调试,直接服务器调试
JPDA(Java Platform Debugger Architecture)是 Java 平台调试体系结构的缩写,通过 JPDA 提供的 API,开发人员可以方便灵活的搭建 Java 调试应用程序。 JPDA 主要由三个部分组成:Java 虚拟机工具接口(JVMTI),...
远程调试方法参数配置 在Java远程调试时添加以下运行参数,可进行调试(我使用的是Tomcat服务器) -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=6332,server=y,suspend=n 其中:...
NULL 博文链接:https://dacoolbaby.iteye.com/blog/2070292
开发建设开发建设开发建设开发建设开发建设开发建设开发建设开发建设开发建设开发建设开发建设开发建设开发建设开发建设开发建设开发建设开发建设开发建设开发建设开发建设开发建设开发建设开发建设开发建设开发建设...
java 远程 笔试题目 java 远程 笔试题目
NULL 博文链接:https://liangqi1124.iteye.com/blog/2314090