如何通过 jvmti 从远程调试器接收断点事件?

How to receive breakpoint events by jvmti, from remoting debugger?

共享虚拟机中有一个jvm。其他开发者可能通过idea远程调试,导致断点挂机

由于某些原因,我需要继续这个过程。

我用 jvmti 编写了一个代理程序,试图接收断点事件以清除它们。但是没有收到任何事件。

接收setbreakpoint事件的正确方式是什么?或者任何其他方式来停止远程挂断?

提前致谢。

在 HotSpot JVM 中,can_generate_breakpoint_events 是一种独有的能力 - 这意味着一次只有一个 JVM TI 代理可以拥有这种能力。

用于远程调试的标准 jdwp 代理也是一个 JVM TI 代理。当它被加载时,没有其他 JVM TI 代理可以获取 can_generate_breakpoint_events 能力。因此,您的代理将无法 set/clear 断点或接收断点事件。

您可能尝试做的是修改原始 libjdwp 而不是尝试在您的单独代理中拦截断点事件。或者更简单 - 每当您想恢复挂起的应用程序时强制关闭 jdwp 连接。