为什么方法断点那么慢

原文
一些IDE提供”方法断点”的功能,可以让断点调试看起来非常简洁,然而在调试过程中我们会发现调试反应时间很长,调试器的性能大大降低。在本文中,我会简单解释方法断点的实现原理,以及为何导致性能变差的原因。

为了更好的理解,我先简单说明一下断点是如何实现的,以及调试器的工作原理。

JPDA(Java Platform Debugger Architecture)

JPDA是JAVA调试框架,主要用于debugger(调试器)和debuggee(调试程序或进程)之间的通信。JPDA主要由三个主要API构成。

为何要用方法断点

如果调用的方法无法访问源码,或者方法内有多个if出口,此时用方法断点很简洁。

JAVA断点原理

在编辑器打一个断点,往往内部会进行三步

方法断点

实际上JDPA不提供方法断点的功能,方法断点是编辑器提供的。

debugger调用上文说的 SetEventNotificationMode()
启用 can_generate_method_entry_eventscan_generate_method_exit_events,当VM运行进入和退出方法时,会向debugger发送 方法进入退出事件:

MethodEntry(....,JmethodID method)
MethodExit(....,JmethodID method)

断点实现流程:

和普通断点的区别在于:方法断点在流程中需要先判断该方法是否被前端标记为应该要打上断点,然后才是注册断点。

调试方法断点为何很慢

Original: https://www.cnblogs.com/allworldg/p/why-method-breakpoint-slow.html
Author: allworldg
Title: 为什么方法断点那么慢

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/644469/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 实践干货

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/linjiqin/p/16262783.htmlAuth…

    技术杂谈 2023年5月31日
    088
  • 全新升级的AOP框架Dora.Interception[6]: 框架设计和实现原理

    目录一、调用链抽象二、基于约定的拦截器定义三、基于调用上下文的依赖注入容器四、拦截器的提供五、调用链的构建六、方法拦截的实现原理七、依赖注入框架的整合八、看看生成的代理类 从设计模…

    技术杂谈 2023年5月31日
    0110
  • Flink之状态编程

    状态编程是Flink最出色的功能没有之一 一、什么是状态? 在流式计算中有些操作一次处理一个独立的事件(比如解析一个事件), 有些操作却需要记住多个事件的信息(比如窗口操作). 那…

    技术杂谈 2023年7月24日
    0115
  • tryenablingthebreakwritelocksoptionforthecleanup

    如图: 一般是在中断:提交/更新的时候产生的。 一般两种解决方式(可以参考其他的): 1,重启ide(我的就是这么神奇,重启idea后好了); 2,在cleanup时勾选 brea…

    技术杂谈 2023年7月24日
    075
  • Linux下安装 SkyWalking 分布式追踪系统

    Linux下安装 SkyWalking 分布式追踪系统 1、SkyWalking简介 1.1 SkyWalking介绍 SkyWalking项目是由华为大牛吴晟开源的个人项目,目前…

    技术杂谈 2023年6月21日
    0111
  • jobs 命令

    jobs命令 显示了当前 shell 环境中已启动的作业状态。如果 JobID 参数没有指定特定作业,就显示所有的活动的作业的状态信息。如果报告了一个作业的终止,shell 从当前…

    技术杂谈 2023年5月31日
    0118
  • 没有Kubernetes怎么玩Dapr?

    Dapr 被设计成一个面向开发者的企业级微服务编程平台,它独立于具体的技术平台,可以运行在”任何地方”。Dapr本身并不提供”基础设施(infr…

    技术杂谈 2023年5月31日
    095
  • 每天一个 HTTP 状态码 101

    101 Switch Protocols 指示服务器端响应了客户端切换协议的要求… 101 Switching Protocols 当客户端的请求具有 Upgrade …

    技术杂谈 2023年7月11日
    090
  • Java基础语法(真随笔,不完整)

    ; ; 一、注释 (1)单行注释 // (2)多行注释 / / (3)文档注释 JavaDoc /* /(用来生成自己的API文档) 二、标识符 (1)都以A-Z、a-z、$、_ …

    技术杂谈 2023年6月21日
    096
  • 【Python 第0课】Why Python?

    为什么用Python作为编程入门语言? 原因很简单。 嗯。。。原因就是,很 简单。。。 每种语言都会有它的支持者和反对者。去Google一下”why python&#8…

    技术杂谈 2023年7月24日
    076
  • 你被离职员工投诉过吗?

    同学你好,很高兴你对团队表达的问题,面对你所提问题我觉得还是有必要作下回答。 首先我个人认为你所描述 确实是开发部 某个期间 的状态,公司其他部门或多或少都有这些现象。 但我当然不…

    技术杂谈 2023年6月1日
    085
  • MySQL的主从复制和分库分表初探

    主从复制 + 分库分表 要讲主从复制,首先来看看MySQL自带的日志文件。 日志 错误日志 错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及…

    技术杂谈 2023年6月21日
    0126
  • 性能测试案例全过程方案五———购物流程(重要!!!)

    代码改变世界 Cnblogs Dashboard Login 2022-01-04 15:08 清风软件测试开发 阅读(10 ) 评论() 编辑 性能测试案例全过程方案五&#821…

    技术杂谈 2023年5月31日
    0111
  • laravel 定义字符串

    https://learnku.com/docs/laravel/5.6/localization/1376 // 全景&#x9…

    技术杂谈 2023年5月30日
    088
  • 日期中带的 T 是什么意思

    This version: Newest version: Authors:Misha Wolf < Charles Wicksteed < Status of thi…

    技术杂谈 2023年5月31日
    093
  • PHP通过CURL获取远程文件header头信息

    使用CURL方法获取远程文件header头信息,与内置函数get_headers不同的是,这个方法不用完整下载文件,只是下载头部信息,速度理论会快一些。 Python reques…

    技术杂谈 2023年6月1日
    095
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球