在Intellij中使用Javadebugging器时,“Drop Frame”是什么意思?

我在Intellij 8中使用了Javadebugging器,注意到一个标签为“drop frame”的button,是否有人知道这个服务的目的是什么? 如何/为什么这会被使用/有用?

您的应用程序的调用堆栈可以在debugging器中查看。 使用“丢帧”function,您可以“回退”到先前的堆栈帧,从某种意义上来说,可以及时回溯。 如果您错过了一个您希望再次看到的关键位置,可以重新input该函数。

正如“Stack Frame”这个名字所表明的那样,已经对全局状态进行的改变(如静态variables,字段值的改变等)将不会被撤消,只有局部variables被重置。 这可能导致与最初导致您的断点的执行path不同。 您需要了解这一点 – 我经常认为这是一个有用的function,可以探索不同的执行path,而无需重新启动应用程序或导致当前堆栈的特定冗长进程。 结合variables值的变化也可以通过debugging器,你可以做各种有趣的事情。

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

在debugging器中拖放帧会popup当前堆栈帧,并将控制权移交给调用方法,重置任何局部variables。 这对于重复执行某个function非常有用,但需要警告:字段突变或全局状态更改将保留。

在这里看到更多信息。

使用debugging器从堆栈中删除帧本质上允许您“倒带”应用程序的执行以达到先前的状态。 堆栈外的variables不会被还原。

作为一个方面说明,我相信这个特性在Eclipse中被称为“Drop to Frame”,但是它的作用是一样的。