最近,我开始在C ++中使用reverse debugging with gdb,它适用于某些类型的问题(例如,循环和递归算法)。除了gdb之外,还有其他用于C / C ++的商业调试器(例如,UndoDB)。
我想知道其他语言是否有好的可逆调试器? 我对Java和Ruby特别感兴趣,但问题是对任何语言都开放。
我发现的另一种方法是在虚拟机上运行您的应用程序并连接到它。我所知道的(但从未测试过)的唯一实现是VMware's Replay Debugging。我想知道它适合哪种类型的调试任务。对于大多数常见问题来说似乎有些过分,但调试通常难以重现的通信或同步问题可能会有所帮助。
背景资料:
答案 0 :(得分:2)
Jiva声称它可以:
JIVE支持Java程序的正向和反向步进。 ...提供向后退步的能力为程序员节省了重新执行程序的时间和精力,直到出错。 JIVE还提供了直接跳回执行历史记录中任何先前点的功能,以便在该点观察对象图。
答案 1 :(得分:2)
在Why is reverse debugging rarely used?(在programmers.stackexchange上),Jakob Engblom发布了关于逆向调试当前状态的精彩摘要:
答案 2 :(得分:1)
很抱歉这个迟来的回复。是的,JIVE的反向步进对调试非常有效。您可以步进或跳回执行历史记录中的任何一点。
您还可以对执行历史记录提出查询,例如,"显示对x"的所有更改," x何时首先变为负数","是否为此行代码执行;如果是这样的话?"等等。这一切都可以通过简单的基于表单的查询来完成。
答案 3 :(得分:1)
您可以查看作者Bil Lewis paper被评为ODB的Omniscient Debugging
。 ODB是离线日志和重播方式的实现,可以在 Java 中实现反向调试。