让我们假设远程调试器连接到本地JVM。如果某个JVMTI代理(调试器代理除外)通过SetBreakpoint设置一个断点,远程调试器会看到它吗?远程调试器是否能够跨过或移除此断点?
可见,我的意思是,断点命中事件将被发送到远程调试器,因此调试器将能够以同样的方式运行,就好像他是设置断点的那个人一样。
发布于 2019-03-02 20:39:32
设置断点和接收断点事件需要can_generate_breakpoint_events功能。在HotSpot JVM中,此功能是独占的(或http://hg.openjdk.java.net/jdk/jdk/file/f3fd73c3a077/src/hotspot/share/prims/jvmtiManageCapabilities.cpp#l146),也就是说,can_generate_breakpoint_events一次只能被一个JVM环境所拥有。
换句话说,所描述的情况永远不会发生:当JDWP代理存在时,没有其他JVM TI代理可以设置断点或订阅断点事件。
https://stackoverflow.com/questions/54611862
复制相似问题