JVM远程调试原理剖析

devtools/2025/1/17 6:08:27/

一、如何开启JVM远程调试

        当一个 Java 应用启动时,JVM 会根据启动参数配置其运行环境。使用 -agentlib:jdwp 参数启动远程调试功能,JVM 会初始化调试代理。

agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar your_application.jar

        参数解释如下

        transport=dt_socket:使用套接字进行通信。

        server=y:JVM 作为服务器等待调试器连接。

        suspend=n:JVM 启动后不暂停应用。

        address=*:5005:监听所有 IP 地址的 5005 端口。

二、JVM远程调试原理

        远程调试 Java 应用的底层实现涉及多个技术层面,包括 Java 虚拟机(JVM)、Java 调试接口(JDI)、Java 调试线协议(JDWP)、和 Socket 网络通信。

        JVM远程调试架构图如下:

         

       1、相关概念:

        (1)Java 调试接口 (JDI)

        JDI 是一组 Java API,提供了与正在运行的 Java 应用交互的方式。它是开发调试工具的高级接口,允许调试器与 JVM 进行交互。

        JDI 主要通过 JDWP 发送请求。具体来说,调试器会通过 JDI 调用方法,这些方法会生成 JDWP 消息并通过网络发送到 JVM。

        (2)Java 调试线协议 (JDWP)

        JDWP 是用于调试的低级协议,定义了调试器与 JVM 之间的通信格式。它负责处理所有的调试请求和响应。

        JDWP 消息包括:

        请求:调试器向 JVM 发送的操作请求,例如设置断点、获取变量值等。

        响应:JVM 对请求的响应,包含结果或状态信息。

        事件:JVM 向调试器报告的事件,例如线程暂停、异常抛出等。

        (3)Socket 网络通信

        JDWP 使用 TCP 套接字进行数据传输。调试器和 JVM 之间的通信是基于 Socket 的,确保了数据的实时传输。

        调试器通过指定的 IP 地址和端口(如 localhost:5005)连接到运行中的 JVM。

        一旦建立连接,调试器和 JVM 之间就可以进行双向通信。

        (4)上下文切换

        在调试过程中,虽然调试器在本地,但所有的代码执行、内存管理和 JDK 调用都是在远程 JVM 上进行的。这意味着,调试器无法直接访问本地的系统资源,而是通过 JDWP 协议间接地与 JVM 交互。

        2、核心流程:

        【客户端(调试端)】

        (1)发起连接。调试器启动并连接到远程 JVM 监听的端口(默认:5005

        (2)发送请求。调试器通过 JDI 调用方法,生成 JDWP 请求(如:设置断点)并发送到 JVM。

        【服务端(线上环境/被调试端)】

        (3)处理请求。JVM 接收到 JDWP 请求后,解析请求并执行相应的操作(如在字节码中插入断点)。

        (4)发送响应。JVM 完成操作后,生成 JDWP 响应并通过 Socket 返回调试器。

        【客户端(调试端)】

       (5)事件响应。 若断点命中、异常抛出,接收特定事件,解析 JDWP响应数据,进入本地断点。


http://www.ppmy.cn/devtools/151193.html

相关文章

【数据结构】快排之三路划分+文件归并排序

排序 一.快排1.快排性能分析2.快排之三路划分3.快排之内省排序 二.归并1.外排序2.文件归并排序 一.快排 1.快排性能分析 决定快排性能的关键点是每次单趟排序后,key对数组的分割,如果每次选key基本二分居中,那么快排的递归树就是颗均匀的满…

设置virtualBox7.0.12 ubuntu24.10 和 windows之间双向复制共享剪贴板

虚拟机配置如下: 在Ubuntu终端输入以下指令:(如果虚拟机重启之后剪贴板不共用了,再次执行第二条指令启动服务就可以解决,Ubuntu终端中复制有时需要使用右键->复制才会到剪贴板上) sudo apt install virtualbox-guest-x11 sudo…

Vue3大事件管理系统

大事件项目介绍与创建 Vue3 大事件管理系统 pnpm 包管理器-创建项目 创建项目 Eslint 配置代码风格 配置代码检查工作流 提交前做代码检查 暂存区 eslint 校验 总结 目录调整 Vue-router4 路由代码解析 路由初始化 总结 引入 Element Plus 自建库 按需引入 Element …

【C#深度学习之路】如何使用C#实现Yolo8/11 Segment 全尺寸模型的训练和推理

【C#深度学习之路】如何使用C#实现Yolo8/11 Segment 全尺寸模型的训练和推理 项目背景项目实现推理过程训练过程 项目展望写在最后项目下载链接 本文为原创文章,若需要转载,请注明出处。 原文地址:https://blog.csdn.net/qq_30270773/article…

【机器学习】制造业转型:机器学习如何推动工业 4.0 的深度发展

我的个人主页 我的领域:人工智能篇,希望能帮助到大家!!!👍点赞 收藏❤ 引言 在当今科技飞速发展的时代,制造业正经历着前所未有的变革,工业4.0的浪潮席卷而来。工业4.0旨在通过将…

力扣152. 乘积最大子数组

给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。 测试用例的答案是一个 32-位 整数。 示例 1: 输入: nums [2,3,-2,4] 输出: 6 解释: 子数组 [2,3…

LLaMa-3 8B + 蒙特卡洛树 约等于 GPT-4

0 Abstract 算法核心概述:MCTSr算法创新性地把大语言模型(LLMs)和蒙特卡洛树搜索(MCTS)结合在一起。大语言模型虽强大,但在复杂数学推理任务中,准确性和可靠性存在问题,而该算法就是…

01、flink的原理和安装部署

flink中主要有两个进程,分别是JobMManager和TaskManager,当然了根据flink的部署和运行环境不同,会有一些不同,但是主要的功能是类似的,下面我会讲下聊下,公司用的多的部署方式,基于yarn集群的部…