Java远程调试
我们必须执行具有特定参数的 Java 应用程序,以允许远程调试器附加。 我们将探索如何设置运行/调试配置来完成我们的工作。
先决条件
要遵循本教程,我们必须启动并运行以下内容。
- 必须设置 Java 18 和环境变量。
- IntelliJ IDEA Community Edition IDE(您也可以从此处下载)。
- 远程计算机的IP地址和端口号(如果在本地计算机上工作,也可以按照本文操作)
考虑到该 IDE 的新手,剩余的教程分为六个部分。 如果您已经在使用 IntelliJ IDEA,您可以跳转到所需的部分; 下面给出了所有这些。
- 创建 Java 应用程序
- 编写Java代码
- Java远程调试
- 运行 Java 应用程序
- 将调试器附加到进程
- Java 调试线路协议
创建 Java 应用程序
步骤1:打开 IntelliJ IDEA IDE。
步骤2:点击文件->新建->项目。 将出现以下屏幕,单击“新建项目”,写入项目名称,然后设置保存位置。
确保选择 Java 语言和 IntelliJ 构建系统。 IntelliJ IDEA 会自动检测您是否已在其默认位置安装 JDK(Java 开发工具包)。
否则,您可以浏览添加 JDK 并从此处下载,而无需导航到浏览器。 最后,单击“创建”按钮。
步骤 3:右键单击 src 文件夹 -> 新建 -> Java 类来创建 Java 类。
写出 Java 类的名称。 如果只写名称,它将在默认包中创建。
要在所需的包中创建 Java 类,请按如下方式编写名称。 它将创建一个分别名为 com.company.remotedebugging 和 RemoteDebugging.java 的包和文件。
编写Java代码
示例代码:
//You may have a different package name. Write yours here
package com.company.remotedebugging;
//RemoteDebugging class
public class RemoteDebugging {
//main method
public static void main(String[] args){
String fullName = "Mehvish Ashiq";
System.out.println("Star Printing");
//iterate over the string variable
for (int i=0 ; i < fullName.length() ; i++) {
try {
//sleep for 500 milliseconds
Thread.sleep(500);
}//end try
catch (InterruptedException e) {
e.printStackTrace();
}//end catch
//print character
System.out.println(fullName.charAt(i));
}//end for-loop
System.out.println("Task Completed!");
}//end main function
}// end RemoteDebugging Class
Java远程调试
我们只需要进行两次运行/调试配置,第一个用于运行应用程序,第二个用于附加到它。 让我们看看如何做到这一点。
设置调试器
第 1 步:转到“运行”->“编辑配置”。
步骤2:单击左上角的+号,然后选择“远程JVM调试”。
第三步:我们配置一些东西。 首先,写下名称来告诉如何调用此运行配置。
您也可以使用默认值,但使用不同的名称来区分是很好的。 确保为“调试器模式”和“传输”选项选择“附加到远程 JVM 和套接字”。
接下来,写入将执行该应用程序的计算机的 IP 地址。 我们将在同一台机器上执行时编写 localhost。
请记住,如果应用程序在不同的计算机上运行,我们将写入 IP 地址。 例如,IP 将类似于 192.168.15.119。
然后,写入您想要为远程连接保持开放的端口号。 现在,将命令行参数复制到记事本中(本教程稍后将使用它)。
要启动的主机应用程序需要这些 VM 选项。 单击“应用”,然后单击“确定”。
请参阅以下屏幕截图以供参考。
设置主机应用程序
我们使用运行/调试配置来设置主机应用程序,但主机应用程序的运行方式没有限制。
右键单击 Java 类主体中的任意位置(在本例中,Java 类是 RemoteDebugging.java),然后选择修改运行配置。 将出现以下屏幕。
单击“修改选项”并选择“添加虚拟机选项”,这将打开以下屏幕。 在设置调试器时写入在记事本中复制的命令行参数,然后将其粘贴,如以下屏幕截图所示。
最后,单击“应用”,然后单击“确定”按钮。
运行 Java 应用程序
通过转到“运行”->“运行”来运行应用程序。 确保选择了您的 Java 类。
程序输出中的第一行必须如下所示。
Listening for transport dt_socket at the address: 5005
这表明我们已经成功启用了调试代理。 现在,我们的 Java 程序已准备好接受传入的调试器连接。
将调试器附加到进程
单击要添加断点的行处的装订线。 我们在以下行中添加断点,如下面的屏幕截图中突出显示的那样。
像我们在上一节中所做的那样,通过转到“运行”->“运行”来运行应用程序。 在程序输出中,单击“附加调试器”。
您可以找到它,如下面的屏幕截图所示。
调试器已成功附加。
结果,程序一到达断点就会暂停。 您可以执行任何与调试相关的操作,例如表达式求值。
完成后,不要忘记通过关闭调试工具窗口中的会话选项卡或单击左侧的红色方块来停止调试器会话。
Java 调试线路协议
Java 调试线协议(也称为 JDWP)是用于调试器和被调试者之间通信的协议。 这里,被调试者是被调试的应用程序,而调试器是连接到被调试的应用程序的进程。
请记住,这两个应用程序可以在不同或同一台计算机上运行。 我们在 JVM 命令行参数中使用 JDWP 来启动被调试应用程序。
它需要下面简要描述的各种参数(选项)。
- 交通是唯一完全需要的选择。 它表示将使用哪种传输机制。 我们使用dt_socket,它与每个平台兼容,让进程在各种机器上运行。 相反,如果两个进程在同一台计算机上执行并且我们只想在 Windows 上工作,则使用 dt_shmem。
- 服务器选项不是强制性的。 当此标志打开时,它定义它如何附加到调试器。 它公开了在地址选项中定义地址的过程。 否则,JDWP 将公开默认值。
- 挂起选项定义 JVM(Java 虚拟机)是否应该挂起并等待调试器连接。
- 地址选项具有调试对象公开的地址和端口号。 这也可以表示转换为字符串的地址(例如,如果我们在 Windows 上使用 server=y 而不指定地址,则为 javadebug)。
相关文章
修复警告:使用或覆盖 Java 中已弃用的 API
发布时间:2023/08/10 浏览次数:75 分类:Java
-
本文我们将了解为什么警告说使用或覆盖已弃用的 API,并演示如何修复此问题以完成任务。修复警告说使用或覆盖 Java 中已弃用的 API
使用 Java 删除文件夹
发布时间:2023/08/09 浏览次数:76 分类:Java
-
在本文中,我们将学习如何使用 Java 编程语言删除文件夹/目录。 有多种方法可以做到这一点。 让我们一一看看。使用Java的File类的delete()删除空文件夹
Java 中的多个动作监听器
发布时间:2023/08/09 浏览次数:178 分类:Java
-
本文我们将介绍如何在 Java 中创建多个动作监听器。在Java中,ActionListener是一个用于处理动作事件的类。 因此,Java 提供了这个接口,使用它我们可以找到用户单击按钮的位置,并生成一些事件
在 Java 中创建通用链表
发布时间:2023/08/09 浏览次数:186 分类:Java
-
本文我们将介绍如何在 Java 中创建一个通用的单链表。Java LinkedList 简介 LinkedList 是线性数据结构,它将数据存储在随机地址的节点中,并且意味着位于不连续的位置。
在JavaFX中使用setAlignment方法
发布时间:2023/08/09 浏览次数:129 分类:Java
-
在本文中,我们将了解如何以我们自己的格式对齐 HBox。 我们将看一个例子并逐行解释它以使其更容易理解。在 JavaFX 中使用 setAlignment() 方法
在 JavaFX 中使用 KeyEvent
发布时间:2023/08/09 浏览次数:70 分类:Java
-
KeyEvent 用于检测按键并在按下按键时执行特定的代码块。本文将展示如何创建按键事件并在用户按下按键时执行简单的代码。 我们还将看到一个简单的示例,以使其更容易理解。
在 JavaFX 中移动对象
发布时间:2023/08/09 浏览次数:199 分类:Java
-
在本文中,我们将向左、右、上、下四个方向移动对象。 为此,我们将使用以下代码。在 JavaFX 中移动对象 我们看一下下面的代码。 我们稍后会解释。
修复在 JRE 8 中使用 JavaFX 时的访问限制错误
发布时间:2023/08/09 浏览次数:95 分类:Java
-
本文将讨论如何修复在 JRE 8 中使用 JavaFX 时出现的访问限制错误。此错误主要发生在 Eclipse IDE 中; 我们的解决方案主要基于Eclipse。修复在 JRE 8 中使用 JavaFX 时的访问限制错误
JavaFX 中的 setOnAction 方法
发布时间:2023/08/09 浏览次数:169 分类:Java
-
在本文中,我们将了解如何为任何 UI 组件创建操作。 此外,我们将看到一个带有解释的示例,以使该主题更容易理解。在JavaFX中使用setOnAction方法