当我在Java执行代码中推送断点时,它实际上是做什么的?

问题描述 投票:3回答:2

当我在Java执行代码中按下一个断点时,它实际上是做什么的?

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

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

java jvm bytecode
2个回答
3
投票

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

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


1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.