在 IntelliJ 中使用 Java 调试器时,“丢帧”是什么意思?

2022-08-31 09:44:59

我在IntelliJ 8中使用Java调试器,并注意到一个标有“丢帧”的按钮。有谁知道这有什么用?如何/为什么会使用/有用?


答案 1

可以在调试器中查看应用程序的调用堆栈。使用“拖放帧”功能,您可以“回退”到以前的堆栈帧,从某种意义上说,可以回到过去。如果您错过了想要再次查看的关键点,这对于重新输入函数很有帮助。

正如名称“Stack Frame”所暗示的那样,已经对全局状态所做的更改(如静态变量,对字段值的更改等)将无法撤消,只有局部变量被重置。这可能会导致执行路径与最初导致断点的执行路径不同。您需要意识到这一点 - 我经常认为这是一个有用的功能,可以探索不同的执行路径,而无需重新启动应用程序或导致当前堆栈的特定冗长过程。结合变量值的变化也可以通过调试器获得,你可以做各种有趣的事情。

请注意,当然,可能发生的任何副作用 - 例如网络流量,文件操作,控制台输出等 - 都不能倒带。


答案 2

调试器中的 Drop Frame 会弹出当前堆栈帧,并将控制权放回调用方法,从而重置所有局部变量。这对于重复单步执行函数非常有用,但要注意:场突变或全局状态更改将保留。

在此处查看更多信息