转载自  Java-JPDA 概述

JPDA:Java 平台调试架构(Java Platform Debugger Architecture)

它是 Java 虚拟机为调试和监控虚拟机专门提供的一套接口。

一、JPDA

https://docs.oracle.com/javase/8/docs/technotes/guides/jpda/

JPDA 由三个规范组成:JVMTI(JVM Tool Interface)、JDWP(Java Debug Wire Protocol)、JDI(Java Debug Interface)

这三个规范的层次由低到高分别是 JVMTI、JDWP、JDI

这三个规范把调试过程分解成几个概念:调试者(debugger)、被调试者(debuggee)、以及它们中间的通信器

关系和作用如下图:

JPDA 被抽象为三层实现。其中 JVMTI 是 JVM 对外暴露的接口。JDI 是实现了 JDWP 通信协议的客户端,调试器通过它和 JVM 中被调试程序通信。

模块 层次 编程语言 作用
JVMTI 底层 C 获取及控制当前虚拟机状态
JDWP 中介层 C 定义 JVMTI 和 JDI 交互的数据格式
JDI 高层 Java 提供 Java API 来远程控制被调试虚拟机

二、JVMTI

https://juejin.im/post/5b029fcef265da0b83370da0

JVMTI(Java Virtual Machine Tool Interface)即指 Java 虚拟机工具接口,它是一套由虚拟机直接提供的 native 接口,它处于整个 JPDA 体系的最底层,所有调试功能本质上都需要通过 JVMTI 来提供。

通过这些接口,开发人员不仅调试在该虚拟机上运行的 Java 程序,还能查看它们运行的状态,设置回调函数,控制某些环境变量,从而优化程序性能。

1.定义及原理

JVMTI 本质上是在 JVM 内部的许多事件进行了埋点。通过这些埋点可以给外部提供当前上下文的一些信息。甚至可以接受外部的命令来改变下一步的动作。

外部程序一般利用C/C++实现一个JVMTIAgent,在Agent里面注册一些JVM事件的回调。当事件发生时JVMTI调用这些回调方法。Agent可以在回调方法里面实现自己的逻辑。JVMTIAgent是以动态链接库的形式被虚拟机加载的。

2.历史

JVMTI 的前身是 JVMDI(Java Virtual Machine Profiler Interface) 和 JVMPI(Java Virtual Machine Debug Interface),它们原来分别被用于提供调试 Java 程序以及 Java 程序调节性能的功能。

在 J2SE 5.0 之后 JDK 取代了JVMDI 和 JVMPI 这两套接口,JVMDI 在最新的 Java SE 6 中已经不提供支持,而 JVMPI 也计划在 Java SE 7 后被彻底取代。

3.功能

JVMTI 处于整个 JPDA 体系的最底层,所有调试功能本质上都需要通过 JVMTI 来提供。

从大的方面来说,JVMTI 提供了可用于 debug 和 profiler 的接口;同时,在 Java 5/6 中,虚拟机接口也增加了监听(Monitoring),线程分析(Thread analysis)以及覆盖率分析(Coverage Analysis)等功能。

从小的方面来说包含了虚拟机中线程、内存、堆、栈、类、方法、变量,事件、定时器处理等等诸多功能。具体可以参考 oracle 的文档。

通过这些接口,开发人员不仅可以调试在该虚拟机上运行的 Java 程序,还能查看它们运行的状态,设置回调函数,控制某些环境变量,从而优化程序性能。

4.实现

JVMTI 并不一定在所有的 Java 虚拟机上都有实现,不同的虚拟机的实现也不尽相同。不过在一些主流的虚拟机中,比如 Sun 和 IBM,以及一些开源的如 Apache Harmony DRLVM 中,都提供了标准 JVMTI 实现。

三、JDWP

JDWP(Java Debug Wire Protocol)是一个为 Java 调试而设计的一个通讯交互协议,它定义了调试器和被调试程序之间传递的信息的格式。

在 JPDA 体系中,作为前端(front-end)的调试者(debugger)进程和后端(back-end)的被调试程序(debuggee)进程之间的交互数据的格式就是由 JDWP 来描述的,它详细完整地定义了请求命令、回应数据和错误代码,保证了前端和后端的 JVMTI 和 JDI 的通信通畅。

比如在 Sun 公司提供的实现中,它提供了一个名为 jdwp.dll(jdwp.so)的动态链接库文件,这个动态库文件实现了一个 Agent,它会负责解析前端发出的请求或者命令,并将其转化为 JVMTI 调用,然后将 JVMTI 函数的返回值封装成 JDWP 数据发还给后端。

另外,这里需要注意的是 JDWP 本身并不包括传输层的实现,传输层需要独立实现,但是 JDWP 包括了和传输层交互的严格的定义,就是说,JDWP 协议虽然不规定我们是通过 EMS 还是快递运送货物的,但是它规定了我们传送的货物的摆放的方式。

在 Sun 公司提供的 JDK 中,在传输层上,它提供了 socket 方式,以及在 Windows 上的 shared memory 方式。当然,传输层本身无非就是本机内进程间通信方式和远端通信方式,用户有兴趣也可以按 JDWP 的标准自己实现。

四、JDI

JDI(Java Debug Interface)是三个模块中最高层的接口,在多数的 JDK 中,它是由 Java 语言实现的。

JDI 由针对前端定义的接口组成,通过它,调试工具开发人员就能通过前端虚拟机上的调试器来远程操控后端虚拟机上被调试程序的运行,JDI 不仅能帮助开发人员格式化 JDWP 数据,而且还能为 JDWP 数据传输提供队列、缓存等优化服务。

从理论上说,开发人员只需使用 JDWP 和 JVMTI 即可支持跨平台的远程调试,但是直接编写 JDWP 程序费时费力,而且效率不高。因此基于 Java 的 JDI 层的引入,简化了操作,提高了开发人员开发调试程序的效率。


https://blog.csdn.net/duqi_2009/article/details/94518203

https://www.ibm.com/developerworks/cn/java/j-lo-jpda1

Java 平台调试架构JPDA相关推荐

  1. java平台调试架构JPDA

    为什么80%的码农都做不了架构师?>>>    最近使用WTP的Server功能很不爽,连tomcat服务器时java类中的任何改动都要重启服务器,一怒之下就改用JPDA了,以下是一 ...

  2. linux java远程调试_[转]JPDA:Java平台调试架构(常用的远程调试方法)

    原文出处:http://www.javaeye.com/topic/75128 最近使用WTP的Server功能很不爽,连tomcat服务器时java类中的任何改动都要重启服务器,一怒之下就改用JPD ...

  3. JPDA:Java平台调试架构

    Java Platform Debugger Architecture( JPDA:Java平台调试架构) 由 Java虚拟机后端和 调试平台前端组成  1.Java虚拟机提供了Java调试的功能  ...

  4. java开发调试定位分析工具大全

    Java是一种非常强大的编程语言,自问世以来就广受欢迎.作为现今十分流行的移动平台--Android的核心语言,它大大促进了移动通信行业的发展.因此可以肯定,随着Android平台的不断扩张,Java ...

  5. Java Agent 调试,Java agent debug

    Java Agent 调试,agent debug 一.简介 Java agent 是在另外一个 Java 应用("目标"应用)启动之前要执行的 Java 程序,这样 agent ...

  6. JAVA毕业设计BS架构考研交流学习平台设计与实现计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计BS架构考研交流学习平台设计与实现计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计BS架构考研交流学习平台设计与实现计算机源码+lw文档+系统+调试部署+数据库 本源码技 ...

  7. Java生鲜电商平台-缓存架构实战

    Java生鲜电商平台-缓存架构实战 说明:在Java生鲜电商中,缓存起到了非常重要的作用,目前整个项目中才用的是redis做分布式缓存. 缓存集群 缓存集群存在的问题 1.热key 缓存集群中的某个k ...

  8. Java生鲜电商平台-订单架构实战

    Java生鲜电商平台-订单架构实战 生鲜电商中订单中心是一个电商后台系统的枢纽,在这订单这一环节上需要读取多个模块的数据和信息进行加工处理,并流向下一环节:因此订单模块对一电商系统来说,重要性不言而喻 ...

  9. java毕业设计bs架构实习管理系统源码+系统+数据库+lw文档+调试运行

    java毕业设计bs架构实习管理系统源码+系统+数据库+lw文档+调试运行 注意:该项目只展示部分功能,如需了解,文末获取源码地址. 临近学期结束,还是毕业设计,你还在做java程序.网络编程.课程设 ...

最新文章

  1. nginx proxy svn 加快_Hexo+Nginx+SVN搭建网站
  2. Linux下安装oracle数据库步骤
  3. 九宫格布局_晒图最佳九宫格,你早就该这样拍了!
  4. RAC 安装完成后 节点间通信不依赖于SSH
  5. python 读取excel表数据_5分钟学会用Python 读取Excel
  6. unity 显示、隐藏Android导航栏
  7. 离线安装gcc(CentOS7)
  8. 「力扣」509. 斐波那契数【动态规划】详解!
  9. 智能情绪分析技术_高新技术改造传统企业,智能化解决粘度分析行业
  10. 当 p<1时,p 范数不满足三角不等式的证明 | p norm | triangle inequality
  11. linux服务器怎么拷贝文件,linux 服务器之间拷贝文件
  12. Vue解决跨域问题之Node反向代理
  13. 熊猫猪新系统测试之三:iOS 8.0.2
  14. 估计中的概率公式总结
  15. MybatisPlus学习〖三〗crud接口实现
  16. [arc075f]Mirrored
  17. java实现doc内容对比_Java平台Word格式处理控件Spire.Doc8月新功能代码演示:比较两个 Word 文档的内容...
  18. 累加器 java_Spark笔记之累加器(Accumulator)
  19. ubuntu18.04 安装Adobe Flash Player
  20. 原生JS实现的滚动抽奖工具(可设置每个奖品概率、滚动速度、滚动圈数)

热门文章

  1. 软件层面可以做到重启本地串口吗_手机关机还是重启好?get这几招,手机更流畅...
  2. mysql权限create细化_mysql权限精细化分配-阿里云开发者社区
  3. 7-3 模板题 (10 分)(思路+详解)
  4. [JavaWeb-MySQL]约束(非空约束,唯一约束,主键约束,外键约束_级联操作)
  5. [蓝桥杯2016决赛]愤怒小鸟-模拟
  6. Linear world POJ - 2674(弹性碰撞+技巧)
  7. 题目 2285: [蓝桥杯][2018年第九届真题]螺旋折线(数论+思维)
  8. the python challenge_The Python Challenge 谜题全解(持续更新)
  9. 数据结构基础概念、逻辑结构、物理结构
  10. 解决module ‘tensorflow‘ has no attribute ‘optimizers‘报错