在Eclipse调试器中进行反向执行是否可能? 我目前正在处理的项目需要至少5秒钟才能从文件中读取和初始化数据,然后才能执行任何操作。如果我在调试器中超越了这个过程,那么我就必须终止程序并重新启动,而这需要相当长的时间。
JIVE扩展了Eclipse Java调试器,具有记录程序状态的功能。JIVE透视图提供一些有用的UML图表,这些图表在程序运行时更新。这些图表提供应用程序状态(对象图)和堆栈跟踪(序列图)的概述。您可以查询记忆的跟踪并在时间轴上向前或向后移动,并查看相应的图表。
Diver只记录方法调用,不像JIVE一样记录程序状态。每个方法调用事件都被存储以供后续检索和分析。它主要扩展Java运行和调试配置来指定过滤器。跟踪可以在运行时暂停/恢复/筛选。一旦记录完成,Diver透视图可以以交互式序列图的形式显示。
JIVE和Diver是从学术研究中发布的开源项目。截至2012年11月,两个项目都在积极维护更新。
Chronon是商业产品,但他们为学生和开源项目提供免费许可证。根据其网站上的介绍,Chronon可能是最全面的记录器,因为它能够重播记录的历史记录、前进和后退,并允许所谓的时间旅行调试。此外,Chronon不需要Eclipse进行录制。
所有这些插件都相当占用资源,因此最好使用良好的计算机规格并使用它们的过滤器功能。成功运行它们的明确要求是在eclipse.ini中扩展堆空间。
就我的情况而言,我尝试使用JIVE和Diver调试XML解析程序,但由于资源不足而导致Eclipse经常卡顿。Diver可能会在Linux 64位上运行有些麻烦,它可以在Ubuntu 32位上运行,并且可能在其他32位发行版上使用这些提示。Diver可以在Windows上工作,尤其是在Windows 64位+64位JVM上,否则您将受到32位Windows上1.3-1.6GB的最大堆空间限制。JIVE在我的Linux 64位上运行良好,并且似乎在其他平台上也正常运行。
是的,Eclipse CDT支持历史调试器功能。
打开调试配置 -> 调试器 -> 启用启动时的反向调试。
然后您可以按shift+F5
或shift+F6
以回退步骤,就像使用F5
或F6
一样前进。
我有偏见,但是Chronon正好符合您的要求。
回到帧并不完全等同于步进后退,因为如果该方法在堆上更改了任何内容,则不会被还原。
我也在Eclipse中寻找这个功能。我知道Visual Studio可以做到这一点。实际上,你可以拖动当前行标记并将其放回代码中的任何位置。我不确定变量的更改是否可以撤消。但即使如此,它仍然非常有用,并节省了大量时间。我已经等待Eclipse很长时间了。
这个问题没有指定Eclipse的语言,而且很多答案都假设是Java。
如果使用C++和GCC调试器,Eclipse有一个Run->Move to Line
命令可以完成任务,并且类似于Visual Studio Set Next Statement。在这种情况下,Eclipse使用了GDB的功能。
如果使用Java,我不知道有没有一种方法可以在Eclipse或Netbeans中实现它,尽管其他答案已经建议使用插件。Eclipse确实有“drop to frame”命令,它适用于我的版本(Juno SR1)中的Java。如果我在调试模式下修改并保存函数内的代码,则执行行会自动移动到当前函数的顶部,然后我可以从那里继续。虽然不是指定行,但也算是一种解决方法。