聊聊 Java 调试的基本工作原理
最编程
2024-07-23 19:25:24
...
Java 平台调试架构(JPDA)由三种接口组成,共同为应用开发调试提供支持。 其中 JVM TI (Tools Interface)定义了 JVM 必须提供的调试接口,JDWP 又名 Java 调试通信协议(Java Debug Wire Protocol),它定义了调试器和目标 JVM (被调试者)之间的通信协议格式与语义,最后 JDI (Java Debug Interface)定义了实现调试所需的应用层接口。
其中的 JPDA Transport 定义了调试器和目标 JVM 之间的通信方式。 此通信是面向连接的,被调试者(又称 debuggee)作为服务端在指定端口侦听调试指令,调试者作为客户端连接此端口发送调试指令、接受调试状态信息。这个架构允许用户轻松调试本地或远程主机上的 JVM。
主要有两种通信方式,socket 通信和共享内存方式。下面演示如何通过 socket 方式调试目标主机。
追加以下 JVM 参数,启动目标 JVM
JVM 5.0 或者更新
-agentlib:jdwp=transport=dt_socket,address=8888,server=y,suspend=y
JVM 5.0 之前
-Xdebug -Xrunjdwp:transport=dt_socket,address=8888,server=y,suspend=y
- transport - 调试通信机制,JVM 通常支持两种调试通信机制 ———— socket 通信和共享内存通信,后者要求调试器和目标 JVM 必须同处一台主机。
指定 dt_socket 使用 socket 通信,dt_shmem 使用共享内存通信。 - address - 调试通信地址,如果 server 为 n 则尝试把此地址附加到调试器,进入调试;server 为 y 是监听此地址传入的连接。
对于 socket 通信,这里填写主机名和端口号;否则填写名称。 - suspend - 暂停 JVM 执行,直到有调试器传入连接。 如果调试一些初始化代码,这个选项非常有用。
上面参数的含义是使用 socket 通信方式,侦听 8888 端口调试请求,暂停 JVM 初始化直到调试器传入连接。
将通信地址附加到调试器,开始调试
jdb -attach 8888
参考链接:
- Java Debug Wire Protocol (JDWP)
- Connection and Invocation Details
推荐阅读
-
Java HashMap 的数据结构和基本原理及其在 Jdk8、Jdk11 和 Jdk17 中的一些变化,以及一些常见问题。
-
深入了解 Java 中的 ThreadLocal 机制,了解其工作原理、优缺点分析、数据库连接管理的应用、使用注意事项
-
深入了解Linux内核调试工具:kprobe的工作原理和实施方法
-
理解LNMP和LAMP架构的基本知识及其工作原理
-
聊聊QUIC协议的基本工作原理、性能表现探究以及部署策略解读
-
深入理解Java中Lock和tryLock方法的工作原理与应用
-
Redisson RedLock 简明解读:红锁加锁的工作流程与基本原理
-
聊聊ASP.NET Core中JWT身份验证的基本工作流程与机制
-
彻底领悟Java里的组合与继承工作原理
-
【2022新手指南】Java编程进阶之路 - 六、技术架构篇 ### MySQL索引底层解析与优化实战 - 你会讲解MySQL索引的数据结构吗?性能调优技巧知多少? - Redis深度揭秘:你知道多少?从基础到哨兵、主从复制全梳理 - Redis持久化及哨兵模式详解,还有集群搭建和Leader选举黑箱打开 - Zookeeper是个啥?特性和应用场景大公开 - ZooKeeper集群搭建攻略及 Leader选举、读写一致性、共享锁实现细节 - 探究ZooKeeper中的Leader选举机制及其在分布式环境中的作用 - Zab协议深入剖析:原理、功能与在Zookeeper中的核心地位 - RabbitMQ全方位解读:工作模式、消费限流、可靠投递与配置策略 - 设计者视角:RabbitMQ过期时间、死信队列与延时队列实践指南 - RocketMQ特性和应用场景揭示:理解其精髓与差异化优势 - Kafka详细介绍:特性及广泛应用于实时数据处理的场景解析 - ElasticSearch实力揭秘:特性概述与作为搜索引擎的广泛应用 - MongoDB认知升级:非关系型数据库的优势阐述,安装与使用实战教学 - BIO/NIO/AIO网络模型对比:掌握它们的区别与在网络编程中的实际应用 - Netty带你飞:理解其超快速度背后的秘密,包括线程模型分析 - 网络通信黑科技:Netty编解码原理与常用编解码器的应用,Protostuff实战演示 - 解密Netty粘包与拆包现象,怎样有效应对这一常见问题 - 自定义Netty心跳检测机制,轻松调整检测间隔时间的艺术 - Dubbo轻骑兵介绍:核心特性概览,服务降级实战与其实现益处 - Dubbo三大神器解读:本地存根与本地伪装的实战运用与优势呈现 ----------------------- 七、结语与回顾