反向调试C / C ++以外的语言

时间:2013-01-04 15:16:30

标签: java ruby debugging

最近,我开始在C ++中使用reverse debugging with gdb,它适用于某些类型的问题(例如,循环和递归算法)。除了gdb之外,还有其他用于C / C ++的商业调试器(例如,UndoDB)。

我想知道其他语言是否有好的可逆调试器? 我对Java和Ruby特别感兴趣,但问题是对任何语言都开放。

我发现的另一种方法是在虚拟机上运行您的应用程序并连接到它。我所知道的(但从未测试过)的唯一实现是VMware's Replay Debugging。我想知道它适合哪种类型的调试任务。对于大多数常见问题来说似乎有些过分,但调试通常难以重现的通信或同步问题可能会有所帮助。

背景资料:

  • gdb使用术语“反向调试”。但是,有很多同义词:
    • “可逆调试”
    • Microsoft将其称为IntelliTrace或“历史调试”
    • 在Java中,这种调试器有时被称为“Ominiscient Debugger”
  • (在programmers.stackexchange上)Why is reverse debugging rarely used?

4 个答案:

答案 0 :(得分:2)

Jiva声称它可以:

  

JIVE支持Java程序的正向和反向步进。 ...提供向后退步的能力为程序员节省了重新执行程序的时间和精力,直到出错。 JIVE还提供了直接跳回执行历史记录中任何先前点的功能,以便在该点观察对象图。

答案 1 :(得分:2)

Why is reverse debugging rarely used?(在programmers.stackexchange上),Jakob Engblom发布了关于逆向调试当前状态的精彩摘要:

答案 2 :(得分:1)

很抱歉这个迟来的回复。是的,JIVE的反向步进对调试非常有效。您可以步进或跳回执行历史记录中的任何一点。

您还可以对执行历史记录提出查询,例如,"显示对x"的所有更改," x何时首先变为负数","是否为此行代码执行;如果是这样的话?"等等。这一切都可以通过简单的基于表单的查询来完成。

http://www.cse.buffalo.edu/jive

答案 3 :(得分:1)

您可以查看作者Bil Lewis paper被评为ODB的Omniscient Debugging。 ODB是离线日志重播方式的实现,可以在 Java 中实现反向调试。