远程调试 Java 应用程序意味着使用本地开发环境连接到远程运行的应用程序。 Java 支持开箱即用的远程调试:目标应用程序必须使用 -agentlib:jdwp[=options]
选项执行,该选项加载 Java Debug Wire Protocol (jdwp) 库,允许使用例如套接字连接进行远程调试。在这篇简短的文章中,您将学习如何使用 IntelliJ 开始调试部署到 Wildfly 服务器的 Web 应用程序。
出于演示目的,可以使用一个非常简单的应用程序:它包含一个(入口)JSP 文件和一个 Java Servlet:
在此示例中,您可以使用 Wildfly Servlet-Only Distribution。从这里获取:http://wildfly.org/downloads/
下载并提取服务器后,请按照以下步骤操作:
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
并使用 standalone.bat
参数运行 standalone.sh
(Windows) 或 --debug
(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
上侦听套接字连接。
webapp-demo.war
文件复制到 WAR
来部署应用程序(例如 WILDFLY_HOME/standalone/deployments
)。验证应用程序是否已部署。假设应用程序运行正常,在IntelliJ中打开这个应用程序的源代码来远程调试它。为此,您需要为项目创建运行配置。
Run > Edit configurations
并添加新配置。在可用配置列表中找到 JBoss
并选择 Remote
。如果尚未配置应用程序服务器,请通过将 JBoss 主目录指向 Wildfly 安装目录 (WILDFLY_HOME
) 来配置它:Management port
选项卡中将9991
设置为Server
,在Port
中将设置为8787
>$
Startup/Connection
配置选项卡:MyServlet.java
)或任何 JSP 文件中设置断点并在服务器上执行代码,例如通过调用有效的 servlet URL。等待调试器命中您的断点:享受在 IntelliJ 中远程调试 Wildfly 应用程序吧!
标签2: Java教程地址:https://www.cundage.com/article/jcg-remote-debugging-wildfly-application-intellij.html