繁体   English   中英

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

[英]Reverse debugging for languages other than C/C++

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

我想知道是否有其他语言的良好可逆调试器? 我对Java和Ruby特别感兴趣,但是这个问题适用于任何语言。

我发现的另一种方法是在虚拟机上运行您的应用程序并连接到它。 我知道(但从未经过测试)的唯一实现是VMware的Replay Debugging 我想知道哪种调试任务合适。 对于大多数常见问题而言似乎显得过分杀伤,但对于调试通常很难重现的通信或同步问题可能很有用。

背景资料:

  • gdb使用术语“反向调试”。 但是,有许多同义词:
    • “可逆调试”
    • Microsoft将其称为IntelliTrace或“历史调试”
    • 在Java中,此类调试器有时称为“ Ominiscient调试器”
  • (在developers.stackexchange上) 为什么很少使用反向调试?

Jiva声称可以:

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

为什么很少使用反向调试? (在developers.stackexchange上),Jakob Engblom发布了有关反向调试当前状态的精彩摘要:

很抱歉收到这则迟来的回覆。 是的,JIVE的反向步进对于调试非常有效。 您可以单步执行或跳回到执行历史记录中的任意点。

您还可以对执行历史进行查询,例如“显示对x的所有更改”,“ x何时首次变为负数”,“此代码行是否曾经执行过;如果是,在哪里?”等。所有这些都可以通过基于表单的简单查询完成。

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

您可以看一下Omniscient Debugging ,作者Bil Lewis将该论文称为ODB。 ODB是脱机日志重播方法的一种实现,可实现Java中的反向调试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM