在 IntelliJ 中远程调试 Wildfly 应用程序

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(237)   2023-12-08 15:34:57

远程调试 Java 应用程序意味着使用本地开发环境连接到远程运行的应用程序。 Java 支持开箱即用的远程调试:目标应用程序必须使用 -agentlib:jdwp[=options] 选项执行,该选项加载 Java Debug Wire Protocol (jdwp) 库,允许使用例如套接字连接进行远程调试。在这篇简短的文章中,您将学习如何使用 IntelliJ 开始调试部署到 Wildfly 服务器的 Web 应用程序。

应用程序

出于演示目的,可以使用一个非常简单的应用程序:它包含一个(入口)JSP 文件和一个 Java Servlet:

Wildfly 应用服务器

在此示例中,您可以使用 Wildfly Servlet-Only Distribution。从这里获取: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 并使用 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 中远程调试 Wildfly 应用程序

假设应用程序运行正常,在IntelliJ中打开这个应用程序的源代码来远程调试它。为此,您需要为项目创建运行配置。

  • 打开Run > Edit configurations 并添加新配置。在可用配置列表中找到 JBoss 并选择 Remote。如果尚未配置应用程序服务器,请通过将 JBoss 主目录指向 Wildfly 安装目录 (WILDFLY_HOME) 来配置它:
  • 现在更改配置的一些默认设置并保存。在Management port选项卡中将9991设置为Server,在Port中将设置为8787 >$ Startup/Connection 配置选项卡:
  • 运行调试配置并等待 IntelliJ 连接到 Wildfly 服务器。
  • 在您要调试的 Java Servlet(例如 MyServlet.java)或任何 JSP 文件中设置断点并在服务器上执行代码,例如通过调用有效的 servlet URL。等待调试器命中您的断点:

享受在 IntelliJ 中远程调试 Wildfly 应用程序吧!

标签2: Java教程
地址:https://www.cundage.com/article/jcg-remote-debugging-wildfly-application-intellij.html

相关阅读

Java HashSet 教程展示了如何使用 Java HashSet 集合。 Java哈希集 HashSet 是一个不包含重复元素的集合。此类为基本操作(添加、删除、包含和大小)提供恒定时间性...
SpringApplicationBuilder 教程展示了如何使用 SpringApplicationBuilder 创建一个简单的 Spring Boot 应用程序。 春天 是用于创建企业应...
通道是继 buffers 之后 java.nio 的第二个主要新增内容,我们在之前的教程中已经详细了解了这一点。通道提供与 I/O 服务的直接连接。 通道是一种在字节缓冲区和通道另一端的实体(通...
课程大纲 Elasticsearch 是一个基于 Lucene 的搜索引擎。它提供了一个分布式的、支持多租户的全文搜索引擎,带有 HTTP Web 界面和无模式的 JSON 文档。 Elasti...
解析器是强大的工具,使用 ANTLR 可以编写可用于多种不同语言的各种解析器。 在这个完整的教程中,我们将: 解释基础:什么是解析器,它可以用来做什么 查看如何设置 ANTLR 以便在 Java...
Java 是用于开发各种桌面应用程序、Web 应用程序和移动应用程序的最流行的编程语言之一。以下文章将帮助您快速熟悉 Java 语言,并迈向 API 和云开发等更复杂的概念。 1. Java语言...
Java中的继承是指子类继承或获取父类的所有非私有属性和行为的能力。继承是面向对象编程的四大支柱之一,用于提高层次结构中类之间的代码可重用性。 在本教程中,我们将了解 Java 支持的继承类型,...
Java Message Service 是一种支持正式通信的 API,称为 网络上计算机之间的消息传递。 JMS 为支持 Java 程序的标准消息协议和消息服务提供了一个通用接口。 JMS 提...
之前,我介绍了spring 3 + hibernate 集成 示例和struts 2 hello world 示例。在本教程中,我将讨论在将 spring 框架与 struts 与 hibern...
Java 项目中的一项常见任务是将日期格式化或解析为字符串,反之亦然。解析日期意味着你有一个代表日期的字符串,例如“2017-08-3”,你想把它转换成一个代表 Java 中日期的对象,例如Ja...