远程调试Java应用程序意味着使用本地开发环境连接到远程运行的应用程序。 Java开箱即-agentlib:jdwp[=options]
支持远程调试:目标应用程序必须使用-agentlib:jdwp[=options]
选项执行, -agentlib:jdwp[=options]
选项加载Java调试线协议(jdwp)库,该库允许使用例如套接字连接的远程调试。 在这篇简短的文章中,您将学习如何使用IntelliJ调试部署到Wildfly服务器的Web应用程序。
应用程序
出于演示目的,可以使用一个非常简单的应用程序:它包含一个(入门)JSP文件和一个Java Servlet:
Wildfly应用服务器
在此示例中,您可以使用仅Wildfly Servlet分发。 从这里获取: http : //wildfly.org/downloads/
配置Wildfly进行远程调试
下载并提取服务器后,请执行以下步骤:
- 编辑
WILDFLY_HOME/standalone/configuration/standalone.xml
并将管理控制台的套接字绑定端口从9990
更改为9991
(可以在socket-binding-group
元素中找到)。 使用默认端口设置,您将在运行服务器时看到异常:
ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC000001: Failed to start service jboss.serverManagement.controller.management.http: org.jboss.msc.service.StartException in service jboss.serverManagement.controller.management.http: java.net.BindException: Address already in use: bind /127.0.0.1:9990
- 导航到
WILDFLY_HOME/bin
并使用--debug
参数运行standalone.bat
(Windows)或standalone.sh
(Linux)。 此参数将强制服务器以调试模式运行,从而启用远程调试。 在控制台启动期间,您会注意到传递给JVM
的额外参数:
JAVA_OPTS: "-client -Dprogram.name=standalone.bat -Xms64M -Xmx512M -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n"
命令: agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n
加载jwdp
库并在端口8787
上侦听套接字连接。
- 通过将
WAR
文件复制到WILDFLY_HOME/standalone/deployments
来部署应用程序(例如webapp-demo.war
)。 验证应用程序已部署。
IntelliJ中的远程调试Wildfly应用程序
假设应用程序运行正常,请在IntelliJ中打开此应用程序的源代码以对其进行远程调试。 为此,您需要为项目创建一个运行配置。
- 打开
Run > Edit configurations
并添加新配置。 在可用配置列表中找到JBoss
,然后选择Remote
。 如果尚未配置应用程序服务器,请通过将JBoss主页指向您的Wildfly安装目录(WILDFLY_HOME
)进行配置:
- 现在更改配置的一些默认设置并保存。 在
Server
选项卡中将Management port
设置为9991
,在Startup/Connection
选项卡中将Port
设置为8787
以进行Debug
配置:
- 运行调试配置,然后等待IntelliJ连接到Wildfly服务器。
- 在要调试的Java Servlet(例如
MyServlet.java
)或任何JSP文件中设置断点,然后在服务器上执行代码,例如,通过调用有效的Servlet URL。 等待调试器达到断点:
享受IntelliJ中的远程调试Wildfly应用程序!
翻译自: https://www.javacodegeeks.com/2017/06/remote-debugging-wildfly-application-intellij.html