JVM /字节码/处理器的断点究竟是什么?

时间:2011-12-21 00:59:01

标签: java jvm bytecode

当我在java执行代码中推送断点时,它真正做了什么?

它是JVM级别的标志吗?在处理器级别?

我们能看到字节码指令的区别吗?它是JVM中的循环吗?

2 个答案:

答案 0 :(得分:3)

我没有找到关于在Java中设置断点的具体参考,但在本机代码中,调试器会在原始指令上放置单字节中断指令(INT 3)。一旦到达,中断就会启动并控制调试器。 This article有更多信息。

JVM Tools documentation我推断在Java字节码中使用了类似的方法。

答案 1 :(得分:1)

取决于实施。对于JITCed代码(例如,常规C / C ++),有些框用trap指令覆盖指令,而其他框则使用“硬件工具”(通常与存储保护相关)来检测命中断点。

类似地,在解释的字节码中,它可以是修改后的字节码(为此保留字节码代码点0xCA)或者通过在解释器中内置地址比较逻辑。