如何退回Eclipse调试器?

Jas*_*son 127 eclipse debugging

是否可以在Eclipse调试器中执行反向执行?我正在处理的当前项目需要至少5秒钟才能完成任何操作之前从文件中读取和初始化数据.如果我在调试器中超越,我必须终止程序并重新启动,这需要相当长的时间.

Mat*_*nry 134

您可以使用Eclipse的drop to frame命令从顶部重新输入当前方法.但它不会展开已发生的任何状态更改,因此根据您所使用的方法,它可能无法正常工作.

另一个非常酷的工具实际上是让你能够及时前进的是Omniscient Debugger.它通过在类加载器中加载类来进行工作,因此它可以记录代码所执行的所有操作.它可以做很酷的事情,例如回答"何时,何地以及为什么这个字段被赋予其当前值?".用户界面相当笨重,处理大型代码库时很难,但在某些情况下,它可以节省大量时间.

更新:Chronon提供了一种商业产品,它描述为"DVR for Java",它似乎与ODB做了很多相同的事情.

  • +1,下降到帧是你想要尝试的. (7认同)

fmj*_*rey 44

除了之前的答案中提到的内容 - 即Eclipse在调试视图中的drop to frame功能,它在堆栈帧中更早地重新启动调试(但不会还原全局/静态数据)和Omniscient调试器,这有点原始而不是那么多不断发展 - 有一些基于Eclipse的工具可用于"返回"(运行)时间:

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

Diver只记录方法调用,并不真正记录JIVE等程序状态.存储每个方法调用事件以供以后检索和分析.它扩展了Java Run和Debug配置,主要用于指定过滤器.可以在运行时暂停/恢复/过滤跟踪.一旦记录,Diver透视图就可以在交互式序列图中显示它.

JIVE和Diver是学术研究发布的开源项目.截至2012年11月,两个项目都很活跃.

Chronon是一种商业产品,但他们拥有免费的学生和开源项目许可证.根据他们网站上声称的内容,它可能是最全面的录像机,因为它能够重放录制的历史记录,来回走动,允许他们说时间旅行调试.录制也不需要Eclipse.

所有这些插件都非常贪婪,所以最好有一台好的规格机器并使用它们的过滤器功能.成功运行它们的一个明确要求是在eclipse.ini中扩展堆空间.

在我的情况下,我试图使用JIVE和Diver调试XML解析程序,但由于缺乏资源,总是最终冻结eclipse.潜水员在linux 64bit上运行可能很棘手,它适用于ubuntu 32位以及可能使用这些技巧的其他32位发行版.Diver适用于Windows,更好的是在Windows 64bit + 64bit JVM上工作,否则你将限制在32位窗口上最大堆空间为1.3-1.6Gb.JIVE在我的linux 64bit上运行良好,似乎在其他平台上运行良好.


Ser*_*gei 12

是的,Eclipse CDT支持历史调试器功能.

打开调试配置 - > 调试器 - > 启动时启用反向调试.

比你可以按shift+F5shift+F6退一步F5F6前进一步.


pde*_*eva 5

我有偏见,但Chronon正是你正在寻找的.

Drop to Frame并没有完全退后,因为如果方法已经改变了堆上的任何东西,它就不会被还原.

  • 是的,您确实需要先录制您的应用程序,然后可以在录制之后的任何时间进行调试.它不同于重新启动应用程序,因为您不需要通过所有步骤来重现该错误.您所做的只是记录错误一次,然后您可以随时查看它,只需要使用录制进行调试.您不需要原始环境的任何部分来播放录制内容. (2认同)