您的位置:首页 > 运维架构 > Tomcat

eclipse+maven+tomcat/jetty进行远程调试

2015-03-16 16:28 615 查看
首先,maven debug配置,请参看:http://maven.apache.org/surefire/maven-surefire-plugin/examples/debugging.html

下面,请看我的实际操作:

一、以tomcat作为容器

以tomcat容器为例,其配置方式有3种:

首先,maven项目的pom.xml文件中,在<build>的<plugins>下边应该配置tomcat7-maven-plugin插件,如下:

<plugin>

<groupId>org.apache.tomcat.maven</groupId>

<artifactId>tomcat7-maven-plugin</artifactId>

<version>2.2</version>

<configuration>

<!-- http port -->

<port>8080</port>

<!-- application path always starts with / -->

<path>/test</path>

</configuration>

</plugin>

(1)方式一

a. 打开cmd命令行,在Maven命令执行前加入一行参数:

export M***EN_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=y
以上内容可以在maven的安装目录的bin\mavenDebug.bat文件中找到。(搜索debug即可)

下面是命令的详细解释:

-XDebug 启用调试

-Xrunjdwp 加载JDWP的JPDA参考执行实例。

transport 用于在调试程序和 VM 使用的进程之间通讯。

dt_socket 套接字传输。

server=y/n VM是否需要作为调试服务器执行。

address=8787调试服务器监听的端口号。

suspend=y/n 是否在调试客户端建立连接之后启动 VM 。如果设置为y,它会阻塞程序运行,直到有客户端连接到对应的监听端口(这里是8787),程序才真正开始执行。我们有时候会抱怨程序一闪而过,还没来得及在本地加载上代码程序就执行完了,这种情况就可以使用suspend参数。

注意事项:

如果你是执行的jar来运行程序,

-jar参数不能写到-Xug参数前,像这样无法启用调试:

java -jar lib/Main.jar -Xdebug -Xrunjdwp:transport=dt_socket,address=9527,server=y,suspend=y

要远程调试maven2启动的程序,例如mvn jetty:run,可以在启动程序时执行命令:export M***EN_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=y"

如果是在Windows环境下,则是:
set M***EN_OPTS=-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y
此时在某个由Maven管理的工程下执行mvn指令,将会使mvn进入远程调试状态,开通我们配置的侦听端口号8787:

b. 执行命令 mvn
tomcat7:run,如下图所示以mavenDebug工程为例:



然后我们就可以使用Eclipse对mvn进行调试了,

c. 打开IDE,进行如下配置:

鼠标选中你要调试的maven项目的pom.xml文件,右键,选择“Debug As”---->"Debug Configuritaions...",弹出一个窗口,在窗口的左边栏,往下拉一下,你可以看到“Remote Java Application”,选择它,右键,“New”,窗口右边将出现一些需要输入的框,按照下图填入相应的值即可:



输入值完成后,点“Debug”按钮即可。

命令行就会出现日志啦,直到看到日志最后一行出现信息: Starting ProtocolHandler ["http-bio-8080"],接下来你就可以用8080端口去访问你的应用了,而8787端口跟tomcat可无关哦,8080是tomcat的端口,8787则是jvm监听的端口。到此,项目已经以debug的模式启动了。

(2)方式二

1.在eclipse的run configurations中创建一个maven build,选择好Maven工程,在Goals一栏中输入tomcat7:run。然后进入“jre”Tab,在vm arguments一栏中输入-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n

2.打开debug configuration,创建一个remote java application,同上“(1)方式一的c”部分的内容,这样,当服务器启动后,就可以进行远程debug了

(3)方式三

在tomcat/bin/的catalina.bat文件的开头加入下面的设置即可:

SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787

然后在eclipse新建一个remote debug,端口填入8787即可。

二、以jetty作为容器

1.在eclipse的run configurations中创建一个maven build,选择好Maven工程,在Goals一栏中输入jetty:run。然后进入“jre”Tab,在vm arguments一栏中输入-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n

2.打开debug configuration,创建一个remote java application,在host中输入服务器地址,一般就本机localhost。在port一栏中输入上面配置中端口号8787。这样,当服务器启动后,就可以进行远程debug了。这种debug方式的好外是可以在debug依赖的jar包,并在上面设置断点。(前提是你已经获得了jar包的源代码)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: