gpt4 book ai didi

lisp - 在 Common Lisp (SBCL) 中调试实时堆栈帧。调试器/编译器如何实现此功能?

转载 作者:太空宇宙 更新时间:2023-11-03 19:03:57 24 4
gpt4 key购买 nike

Lisp 允许在调试过程中重新编译代码段以生成实时堆栈帧。我知道 lisp 是动态的,并且很容易重新绑定(bind)与方法关联的符号。然而,Lisp 也很容易允许在函数内重新定义单个形式。这比 C# 和 Java 调试器的功能更加强大和灵活。为什么以及如何运作?为什么现代语言不提供相同级别的复杂性?我在哪里可以找到一些论文或书籍以了解更多信息?

最佳答案

这不是魔法。我过去在装配时也做过同样的事情。我创建了一个 DOS TSR 程序,它将我可以处理的中断指向我自己的位置。当你除以零或类似的东西时,它跳进了我的程序,堆栈有所有以前的程序堆栈和它出错的地方。我只是提供了一个菜单,其中包含修复它的方法,这样它就不会以 DOS 默认行为退出。

在 CL 中,您有一个默认的异常处理程序,它调用一个函数,您可以在重新启动时看到您的选项。重新启动就像错误起源范围内的代码以及修复这种情况的方法。可以用任何有异常和闭包的语言来做这样的事情。调试器和重新启动成为正在运行的程序的一部分,因此它以较低的性能为代价变得更加安全。 Here is a JavaScript implementation .

有一种方法可以关闭它,它可能会使您的程序在 CL 中运行得更快。该标准不需要执行任何操作,因此它是可选的,但实现确实会产生不安全的快速代码,这些代码可能最终会成为段错误而不是调试器。

关于lisp - 在 Common Lisp (SBCL) 中调试实时堆栈帧。调试器/编译器如何实现此功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45659321/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com