“时间旅行调试器”的原理是什么?

时间:2017-02-08 03:13:44

标签: javascript c++ c compiler-construction time-travel

嗯......我的老师,我的一些同学和我将要构建一个Debugger项目。我们希望我们的调试器是交互式的,也就是说,当输入代码时,结果将在几秒钟后的某个地方显示,并且结果会在输入代码更改时发生变化。另一方面,在跑步的时候,我们可以 回滚到前一行或断点

按照我老师的说法,编程时会涉及“时间旅行调试”技术。我搜索了一些由其他人维护的项目,但我很难理解代码,并且在任何这些README文件中都没有介绍这种技术。

参考: https://github.com/mattgodbolt/compiler-explorer

2 个答案:

答案 0 :(得分:9)

这通常被称为"时间旅行调试",并且通常与"功能反应编程"相关联。 (这些是您可以轻松搜索的术语。)Elm Language博客上有一些可以合理访问的文档(例如,time travel made easy),但我建议您从头开始而不是潜入中间,不得不时间旅行你的理解(一些双关语意图: - ))

严格来说,时间旅行调试是在运行时发生的事情,但是如果您使用函数式语言(例如Haskell,Elm,OCAML或其他各种语言)进行编程则更容易,因为时间调整器已经过实现),并编译这些语言(是的,它们被编译)涉及一些有趣的概念。

Elm编译为javascript,这使得相对容易进行实验。

玩得很开心。

答案 1 :(得分:4)

时间旅行调试也称为 反向调试 。通俗地说,您可以反复调试相同的行(不停止/重新启动应用程序)。

例如,您正在调试一个在第10行引发异常的方法,为了找到异常的原因,您可以从前一点再次执行该方法,让我们说第4行而不重新启动完整的调试过程。这一切都是实时且非常有效的。

我在 Visual Studio 中使用了此功能。