Answers:
您可以使用Eclipse的drop to frame命令从顶部重新输入当前方法。但是它不会展开已发生的任何状态更改,因此它可能无法工作,具体取决于您所使用的方法类型。
Omniscient Debugger是另一个确实很酷的工具,它确实可以让您及时地前进和后退。它通过对类加载到类加载器中进行检测来工作,因此它可以记录代码执行的所有操作。它可以做很酷的事情,例如回答“何时,何地以及为什么为该字段分配其当前值?”。UI非常笨拙,并且在处理大型代码库时可能会很费力,但是在某些情况下,它确实可以节省很多时间。
更新:Chronon提供了一种商业产品,它被描述为“ Java DVR”,似乎与ODB做了很多相同的事情。
除了早先的答案中提到的内容以外,即Eclipse在调试视图中的拖放到框架功能,该功能在堆栈框架中较早地重新启动调试(但不还原全局/静态数据)和Omniscient调试器,这有点原始,而且没有太多不断发展-有一些基于Eclipse的工具可用于在(运行)时间内“返回”:
JIVE扩展了Eclipse Java调试器的功能,使其能够记录程序状态。JIVE透视图提供了一些有用的UML图,这些图在程序运行时会更新。这些图概述了应用程序的状态(对象图)和堆栈跟踪(顺序图)。您可以查询存储的轨迹,并及时前进和后退,并查看相应的图。
Diver仅记录方法调用,而没有真正记录程序状态(如JIVE)。存储每个方法调用事件,以供以后检索和分析。它主要扩展了Java Run和Debug配置以指定过滤器。跟踪可以在运行时暂停/恢复/过滤。记录后,Diver透视图可以在交互式序列图中显示它。
JIVE和Diver是学术研究发布的开源项目。截至2012年11月,两个项目均处于活动状态。
Chronon是一种商业产品,但它们为学生和开源项目提供免费许可证。从他们网站上声称的内容来看,它可能是最全面的记录器,因为它能够重放记录的历史记录,并来回移动,使他们可以花时间调试。此外,Eclipse不需要进行记录。
所有这些插件在资源上都非常贪婪,因此最好拥有一台规格良好的机器并使用其过滤器功能。成功运行它们的明确要求是扩展eclipse.ini中的堆空间。
以我为例,我尝试使用JIVE和Diver调试XML解析程序,但由于缺乏资源,总是以冻食告终。使用这些技巧,Diver 在Linux 64位操作系统上运行可能会比较棘手,它可以在Ubuntu 32位以及其他32位发行版上运行。Diver可在Windows上运行,最好在Windows 64位+ 64位JVM上运行,否则在32位Windows上您将只能使用1.3-1.6Gb的最大堆空间。JIVE在我的Linux 64bit上运行良好,在其他平台上似乎运行良好。
是的,Eclipse CDT支持历史调试器功能。
打开调试配置 -> 调试器 -> 在启动时启用反向调试。
比您可以按shift+F5
或向前或shift+F6
向后退一步。F5
F6
我有偏见,但Chronon确实满足您的需求。
Drop to Frame并不会完全退后,因为如果该方法更改了堆中的任何内容,则不会还原。
我也在Eclipse中寻找此功能。我知道视觉工作室可以做到。实际上,您可以将当前行标记拖放到代码中的任何位置。我不太确定是否可以撤消对变量的更改。即便如此,它仍然非常有用,并且可以节省大量时间。我已经等了很长时间了。
该问题未指定Eclipse语言,并且许多答案都假定使用Java。
如果将C ++和GCC与GDB调试器一起使用,则Eclipse Run->Move to Line
可以完成工作和功能,例如Visual Studio Set Next Statement。在这种情况下,Eclipse使用的是GDB中的功能。
如果使用Java,尽管其他答案都建议使用插件,但我不知道如何使用Eclipse或Netbeans来实现。在我的版本(Juno SR1)中,Eclipse确实具有适用于Java的“ drop to frame”命令。如果在调试模式下修改并保存函数中的代码,执行行将自动移至当前函数的顶部,我可以从那里继续。与指定行不同,但这是必须的。