8

嗯...我的老师,我的一些同学和我要构建一个调试器项目。我们希望我们的调试器是交互式的,也就是说,当输入代码时,结果会在几秒后的某个地方显示出来,结果随着输入代码的变化而变化。另一方面,在运行时,我们可以回滚到前一行或断点

按照老师的话,编程的时候会用到“时间穿梭调试”这个技巧。我搜索了一些由其他人维护的项目,但我无法理解代码,并且在任何这些 README 文件中都没有关于此技术的介绍。

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

4

2 回答 2

11

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

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

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

享受项目的乐趣。

于 2017-02-08T04:15:30.077 回答
4

时间旅行调试也称为反向调试。用外行的话来说,您可以一次又一次地调试相同的行(无需停止/重新启动应用程序)。

例如,您正在调试一个在第 10 行引发异常的方法,要查找异常原因,您可以从先前的点再次执行该方法,例如第 4 行,而无需重新启动完整的调试过程。这一切都是实时且非常高效的。

我在Visual Studio中使用过这个功能。

于 2017-10-08T12:08:46.750 回答