如何退后一步Eclipsedebugging器?

在Eclipsedebugging器中可以执行反向执行吗? 我正在处理的当前项目需要至less5秒才能完成任何事情,从文件中读取和初始化数据。 如果我在debugging器中超出范围,我必须终止程序并重新启动,这需要花费相当长的时间。

您可以使用Eclipse的drop frame命令从顶部重新input当前方法。 但是它不会展开已经发生的任何状态变化,所以根据你所在的方法,它可能不起作用。

另一个非常酷的工具实际上可以让你及时回退和前进是全知的debugging器 。 它通过在类加载到类加载器时加以检测来工作,因此它可以logging代码所做的一切。 它可以做很酷的事情,比如回答“何时,何地,为什么这个字段分配了它的当前值?”。 用户界面相当笨拙,处理大型代码基础可能很困难,但是在某些情况下可以节省很多时间。

更新 : Chronon提供了一个商业产品,它被描述为“DVR for Java”,它看起来和ODB有很多相同的function。

除了以前的答案中提到的东西,比如Eclipse的debugging视图中的框架function,它重新开始在堆栈框架中的早期debugging(但不会恢复全局/静态数据)和全能debugging器 ,这是有点粗糙,没有那么多不断发展 – 有一些基于Eclipse的工具可以用来在(运行)时间内“返回”:

  • JIVE :Java交互式可视化环境
  • Chronon :Java程序的“飞行数据logging器”
  • 潜水员(已停产) :逆向工程的dynamic交互式视图
  • Halik :现在只适用于IntelliJ,但是在路线图中提到了移植到Eclipse 。

JIVE扩展了Eclipse Javadebugging器,能够logging程序状态。 JIVE透视图提供了一些在程序运行时更新的有用UML图。 这些图表提供了应用程序状态(对象图)和堆栈跟踪(序列图)的概述。 您可以查询记忆的轨迹,并及时回退,并查看相应的图表。

潜水员只logging方法调用,并不真正logging像JIVE一样的程序状态。 每个方法调用事件都被存储起来供以后检索和分析。 它扩展了Java运行和debuggingconfiguration,主要是为了指定filter。 跟踪可以在运行时暂停/恢复/过滤。 一旦logging,Diver透视图可以在交互式的顺序图中显示。

JIVE和Diver是来自学术研究的开源项目。 截至2012年11月,这两个项目都很活跃。

Chronon是一个商业产品,但他们有免费的学生和开源项目许可证。 从他们的网站上声称,它可能是最全面的录音机,因为它能够重放录制的历史,来回走动,允许他们说时间旅行debugging。 另外Eclipse不需要录制。

所有这些插件都相当贪婪的资源,所以最好有一个好的规格机器,并使用他们的filterfunction。 成功运行它们的明确要求是扩展eclipse.ini中的堆空间 。

在我的情况下,我试图使用JIVE和Diver来debuggingXMLparsing程序,但总是由于缺乏资源而导致冻结eclipse。 潜水员可能会非常棘手的运行在Linux 64位 ,它可以在Ubuntu 32位和其他可能的32位发行版使用这些技巧 。 Diver可以在Windows上运行,在Windows 64bit + 64bit JVM上更好,否则32bit窗口的最大堆栈空间将被限制在1.3-1.6Gb 。 JIVE在我的linux 64bit上效果很好,而且在其他平台上似乎也能正常工作。

是的 ,Eclipse CDT支持历史debugging器function。

打开debuggingconfiguration – > debugging器 – > 在启动时启用反向debugging

比你可以按shift+F5shift+F6退后一步,如F5F6向前一步。

我有偏见,但Chronon正是你正在寻找的东西。

Drop to Frame并不是完全退步,因为如果方法改变了堆上的任何东西,它将不会被恢复。

我也在eclipse中寻找这个function。 我知道视觉工作室可以做到这一点。 其实你可以拖动当前行标记,并放回代码的任何地方。 我不确定是否可以撤消对variables的更改。 但是它仍然非常有用,并且节省了大量的时间。 我一直在等待这个日食很长时间。

这个问题没有指定一个Eclipse语言,许多答案都假设为Java。

如果在GDBdebugging器中使用C ++和GCC,Eclipse将具有Run->Move to Linefunction,这些function与Visual Studio Set Next Statement类似。 在这种情况下,Eclipse正在使用GDB中的function。

如果使用Java,我不知道用Eclipse或Netbeans的方式,尽pipe其他答案已经build议插件。 Eclipse在我的版本(Juno SR1)中有确实适用于Java的“drop to frame”命令。 如果我在debugging模式下修改和保存一个函数中的代码,执行行自动移到当前函数的顶部,我可以从那里继续。 不一样的指定行,但它是一些东西。