当我在Java执行代码中按下一个断点时,它实际上是做什么的?
在JVM级别上是标志吗?在处理器级别?
我们能看到字节码指令的区别吗?还是在JVM中循环?
我没有找到关于在Java中设置断点的具体参考,但是在本机代码中,调试器会将单字节中断指令(INT 3)置于原始指令之上。一旦到达,中断就会启动并将控制权交给调试器。 This article有更多信息。
从JVM Tools documentation我推断出在Java字节码中使用了类似的方法。
取决于实现。对于JITCed代码(例如,常规C / C ++),某些框用陷阱指令覆盖该指令,而其他框则使用“硬件设施”(通常与存储保护有关)来检测中断点。
类似地,在解释的字节码中,它可以是修改后的字节码(为此保留字节码代码点0xCA或通过在解释器中内置地址比较逻辑。