![]() |
1
4
实现这一点的一种方法是在系统中记录不确定性的来源(I/O、中断),并以不同的间隔获取状态快照。这样,您可以通过恢复到以前的快照并使用记录的非确定性向前播放来“倒带”,直到您在过去达到所需的点。 例如,想象一下这个时间线:
假设用户想要倒带到第3点。您可以通过将系统状态(例如内存、寄存器)恢复到第2点并让系统像往常一样执行,直到达到第3点。当需要从磁盘、网络或其他非确定性源获取数据时,历史调试器可以使用其记录的信息来提供数据。对于用户来说,程序的状态似乎只是简单地恢复到第3点。 我相信这是一个简单的观点 VMWare's Replay Debugger 工程(另见 tech talk ) |
![]() |
2
2
嗯,最重要的是,他们不会在 每一条指令 只是在不同的“兴趣点”(例如,当抛出异常时,当调用某些方法时,等等)。例如,Microsoft的IntelliTrace(在VS2010中)在访问文件系统和注册表、与WinForms UI的交互等方面快照。 其次,它不会快照 整个程序状态 . 例如,当您访问一个文件时,IntelliTrace会记录该文件的名称、您要求的访问权限等等,但您不能只返回到该点并查看每个全局变量的状态。 我不知道其他历史调试程序,但无论如何,这就是IntelliTrace在VS2010中的工作方式。 |
![]() |
3
0
它大概 拿 每次都是状态快照,但仅限于 保留 州与州之间的三角洲(当然,不看它的代码就不可能确切地说出任何一个州是如何运作的)。 |