原文
一些IDE提供”方法断点”的功能,可以让断点调试看起来非常简洁,然而在调试过程中我们会发现调试反应时间很长,调试器的性能大大降低。在本文中,我会简单解释方法断点的实现原理,以及为何导致性能变差的原因。
为了更好的理解,我先简单说明一下断点是如何实现的,以及调试器的工作原理。
JPDA(Java Platform Debugger Architecture)
JPDA是JAVA调试框架,主要用于debugger(调试器)和debuggee(调试程序或进程)之间的通信。JPDA主要由三个主要API构成。
为何要用方法断点
如果调用的方法无法访问源码,或者方法内有多个if出口,此时用方法断点很简洁。
JAVA断点原理
在编辑器打一个断点,往往内部会进行三步
方法断点
实际上JDPA不提供方法断点的功能,方法断点是编辑器提供的。
debugger调用上文说的 SetEventNotificationMode()
,
启用 can_generate_method_entry_events
和 can_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/
转载文章受原作者版权保护。转载请注明原作者出处!