迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

Java远程调试

作者:迹忆客 最近更新:2023/08/10 浏览次数:

我们必须执行具有特定参数的 Java 应用程序,以允许远程调试器附加。 我们将探索如何设置运行/调试配置来完成我们的工作。


先决条件

要遵循本教程,我们必须启动并运行以下内容。

  • 必须设置 Java 18 和环境变量。
  • IntelliJ IDEA Community Edition IDE(您也可以从此处下载)。
  • 远程计算机的IP地址和端口号(如果在本地计算机上工作,也可以按照本文操作)

考虑到该 IDE 的新手,剩余的教程分为六个部分。 如果您已经在使用 IntelliJ IDEA,您可以跳转到所需的部分; 下面给出了所有这些。

  1. 创建 Java 应用程序
  2. 编写Java代码
  3. Java远程调试
  4. 运行 Java 应用程序
  5. 将调试器附加到进程
  6. Java 调试线路协议

创建 Java 应用程序

步骤1:打开 IntelliJ IDEA IDE。

步骤2:点击文件->新建->项目。 将出现以下屏幕,单击“新建项目”,写入项目名称,然后设置保存位置。

确保选择 Java 语言和 IntelliJ 构建系统。 IntelliJ IDEA 会自动检测您是否已在其默认位置安装 JDK(Java 开发工具包)。

否则,您可以浏览添加 JDK 并从此处下载,而无需导航到浏览器。 最后,单击“创建”按钮。

java远程调试-创建项目

步骤 3:右键单击 src 文件夹 -> 新建 -> Java 类来创建 Java 类。

java远程调试——创建java类

写出 Java 类的名称。 如果只写名称,它将在默认包中创建。

要在所需的包中创建 Java 类,请按如下方式编写名称。 它将创建一个分别名为 com.company.remotedebugging 和 RemoteDebugging.java 的包和文件。

java远程调试-命名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 步:转到“运行”->“编辑配置”。

java 远程调试 - 设置调试器屏幕一

步骤2:单击左上角的+号,然后选择“远程JVM调试”。

java 远程调试 - 设置调试器屏幕二

第三步:我们配置一些东西。 首先,写下名称来告诉如何调用此运行配置。

您也可以使用默认值,但使用不同的名称来区分是很好的。 确保为“调试器模式”和“传输”选项选择“附加到远程 JVM 和套接字”。

接下来,写入将执行该应用程序的计算机的 IP 地址。 我们将在同一台机器上执行时编写 localhost。

请记住,如果应用程序在不同的计算机上运行,我们将写入 IP 地址。 例如,IP 将类似于 192.168.15.119。

然后,写入您想要为远程连接保持开放的端口号。 现在,将命令行参数复制到记事本中(本教程稍后将使用它)。

要启动的主机应用程序需要这些 VM 选项。 单击“应用”,然后单击“确定”。

请参阅以下屏幕截图以供参考。

java 远程调试 - 设置调试器屏幕三

设置主机应用程序

我们使用运行/调试配置来设置主机应用程序,但主机应用程序的运行方式没有限制。

右键单击 Java 类主体中的任意位置(在本例中,Java 类是 RemoteDebugging.java),然后选择修改运行配置。 将出现以下屏幕。

java 远程调试 - 设置主机应用程序屏幕一

单击“修改选项”并选择“添加虚拟机选项”,这将打开以下屏幕。 在设置调试器时写入在记事本中复制的命令行参数,然后将其粘贴,如以下屏幕截图所示。

最后,单击“应用”,然后单击“确定”按钮。

java 远程调试 - 设置主机应用程序屏幕二

运行 Java 应用程序

通过转到“运行”->“运行”来运行应用程序。 确保选择了您的 Java 类。

java远程调试-运行应用程序屏幕一

程序输出中的第一行必须如下所示。

Listening for transport dt_socket at the address: 5005

这表明我们已经成功启用了调试代理。 现在,我们的 Java 程序已准备好接受传入的调试器连接。

将调试器附加到进程

单击要添加断点的行处的装订线。 我们在以下行中添加断点,如下面的屏幕截图中突出显示的那样。

java 远程调试 - 附加调试器屏幕一

像我们在上一节中所做的那样,通过转到“运行”->“运行”来运行应用程序。 在程序输出中,单击“附加调试器”。

您可以找到它,如下面的屏幕截图所示。

java 远程调试 - 附加调试器屏幕二

调试器已成功附加。

java 远程调试 - 附加调试器屏幕四

结果,程序一到达断点就会暂停。 您可以执行任何与调试相关的操作,例如表达式求值。

java 远程调试 - 附加调试器屏幕三

完成后,不要忘记通过关闭调试工具窗口中的会话选项卡或单击左侧的红色方块来停止调试器会话。


Java 调试线路协议

Java 调试线协议(也称为 JDWP)是用于调试器和被调试者之间通信的协议。 这里,被调试者是被调试的应用程序,而调试器是连接到被调试的应用程序的进程。

请记住,这两个应用程序可以在不同或同一台计算机上运行。 我们在 JVM 命令行参数中使用 JDWP 来启动被调试应用程序。

它需要下面简要描述的各种参数(选项)。

  1. 交通是唯一完全需要的选择。 它表示将使用哪种传输机制。 我们使用dt_socket,它与每个平台兼容,让进程在各种机器上运行。 相反,如果两个进程在同一台计算机上执行并且我们只想在 Windows 上工作,则使用 dt_shmem。
  2. 服务器选项不是强制性的。 当此标志打开时,它定义它如何附加到调试器。 它公开了在地址选项中定义地址的过程。 否则,JDWP 将公开默认值。
  3. 挂起选项定义 JVM(Java 虚拟机)是否应该挂起并等待调试器连接。
  4. 地址选项具有调试对象公开的地址和端口号。 这也可以表示转换为字符串的地址(例如,如果我们在 Windows 上使用 server=y 而不指定地址,则为 javadebug)。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 Java 中延迟几秒钟的时间

发布时间:2023/12/17 浏览次数:217 分类:Java

本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。

如何在 Java 中把 Hashmap 转换为 JSON 对象

发布时间:2023/12/17 浏览次数:187 分类:Java

它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。

如何在 Java 中按值排序 Map

发布时间:2023/12/17 浏览次数:171 分类:Java

本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map 进行排序,并列出了一些示例代码来理解它。

如何在 Java 中打印 HashMap

发布时间:2023/12/17 浏览次数:192 分类:Java

本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。

在 Java 中更新 Hashmap 的值

发布时间:2023/12/17 浏览次数:146 分类:Java

本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。

Java 中的 hashmap 和 map 之间的区别

发布时间:2023/12/17 浏览次数:79 分类:Java

本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,

在 Java 中获取用户主目录

发布时间:2023/12/17 浏览次数:218 分类:Java

这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。

Java 中 size 和 length 的区别

发布时间:2023/12/17 浏览次数:179 分类:Java

这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。

Java 中的互斥锁

发布时间:2023/12/17 浏览次数:111 分类:Java

了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便