java debug 体系分析

nobug

      作为一个程序员,每天都会遇到问题、调试代码。常见的调试一般是加日志、打断点。在java中添加日志,每次都要编译,极其不便。java作为一门成熟的语言,怎么能没有成熟的机制?我们平时一般会用IDE自带的调试工具,eclipse、Intellij 等。本文将讲解一下java debug 体系的基础知识。


intellij

1 JPDA (Java platform debug Architecture)体系介绍

      我们在调试的过程中,一般需要一些方法来观察和测试运行态中的环境信息,比如变量、状态、jvm 状态、堆栈信息等。这些通过JPDA都可以搞到。

2 JPDA结构

JPDA结构

      JPDA定义了一个完整独立的体系,它由三个相对独立的层次共同组成,而且规定了三者之间的交互方式。这三个层次由低到高依次是Java 虚拟机工具接口(JVMTI),Java 调试线协议(JDWP)以及 Java 调试接口(JDI)。这三个模块把调试过程分解成几个很自然的概念:调试者(debugger)和被调试者(debuggee),以及他们中间的通信器。

3 JPDA三层结构的交互

交互

基本交互可以分为如下步骤:

3.1、jvmti 相关的步骤

  • jvm启动,注册JVMTI:jvm启动时,会检查对应的jvm参数,加载jvmti。
  • jvm启动, jdwp以agent的方式加载,并且设置对应的callback函数。启动jdwp的监听socket ;并且会初始化一个eventQueue实例,用户后续跟jdi 进行event交互。event 共有18种。(这个过程可以在启动时加载,也可以jvm其中之后以attach的方式加载 你假笨的jvm attach机制实现)。具体的jvm启动过程可以看一些我的这篇文章:jvm启动

3.2、JDI相关的步骤

上述步骤主要描述了一下jvmti 相关的启动,下面讲一下JDI相关的步骤(以断点调试为例):

  • 从Intellij建立Remote debug, 此时就是建立了一个socket连接(上面步骤中jdwp agent 已经建立了socket ,等待客户端的连接)
  • 建立完连接,第一件事情就是双方进行handshake 交互,彼此之间确认对方使用的都是jdwp协议。
  • Intellij 设置断点,就是通过jdi 的eventRequestManage 生成一个类型为breakpoint event 并且带有filter(保证只在特定地方生效)的eventRequest, 然后按照jdwp协议组装成command ,发送给目标jvm.

3.3、目标jvm的处理

  • 目标jvm接收到来自调试端的command 指令,会解析指令
  • 目标jvm 运行,当触发breakpoint event 且满足调试端的filter 规则时 ,将这个breakpoint event加入到breakpoint eventSet 中
  • 然后 eventQueue 实例会将eventSet 按照FIFO的顺序返回给调试端。当然返回之前会将结果按照jdwp协议组装成reply 命令返回。

4 总结

本文讲述了JPDA的概述,组成部分,重点讲述了组成部分之间的交互流程。后面的文章将展开讲述这几个组成部分。
本系列其他文章链接:
jvm启动流程图
jvmti agent的加载与回调函数的执行分析
java debug 体系-jdi
java debug 体系-jdwp
java debug 体系-JVMTI

参考文献

1、第 1 部分,JPDA 体系概览
2、JPDA#2:架构源码浅析
3、jvm启动流程图

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355

推荐阅读更多精彩内容