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