&引用;热的;在公共LISP中调试和交换

&引用;热的;在公共LISP中调试和交换,lisp,common-lisp,Lisp,Common Lisp,经常提到的公共Lisp独有的一个特性是“热”调试。也就是说,它能够调试、编辑和重新编译生产代码,而无需停止或使后者离线 虽然我一直看到有人提到这一点,但我还没有看到关于如何做到这一点的教程 比如说,Emacs是如何做到这一点的?有一些简单的例子吗?该功能真的像它看起来那么神奇吗?实现这一点的典型方法是在要调试的应用程序中启用SWANK。这样,您可以从Emacs使用M-x slime connect连接到正在运行的服务器。从那里,你可以做任何你可以做的正常粘液会议。您甚至可以设置重新解析文件名的方

经常提到的公共Lisp独有的一个特性是“热”调试。也就是说,它能够调试、编辑和重新编译生产代码,而无需停止或使后者离线

虽然我一直看到有人提到这一点,但我还没有看到关于如何做到这一点的教程


比如说,Emacs是如何做到这一点的?有一些简单的例子吗?该功能真的像它看起来那么神奇吗?

实现这一点的典型方法是在要调试的应用程序中启用SWANK。这样,您可以从Emacs使用
M-x slime connect
连接到正在运行的服务器。从那里,你可以做任何你可以做的正常粘液会议。您甚至可以设置重新解析文件名的方式,以便在使用
M-.
跳转到函数源时,可以使用Tramp在远程计算机上打开该函数

我认为你没有看到关于它的教程的原因是因为这是一件很自然的事情,而且在进行本地调试和在远程系统上工作之间并没有太大区别


有一段视频是我曾经做过的一次演讲,在那里我演示了其中的一些内容,所以肯定有视频。然而,我认为在Stackoverflow上链接到外部视频是不可取的。

我为自己做了一些笔记。我基本上同意我们应该有一个教程。在公园里

编辑:现在有一个)

阅读

另一种选择是热交换所有更改。为此,我的hunchentoot服务器还启动了一个swank服务器,如下所示:

当然,Swank是SLIME的服务器端组件。它运行在无法远程访问的端口上,只能通过本地或SSH隧道连接到该端口。我使用后者将PC上的SLIME连接到服务器上运行的Swank,这样我就可以在不重新启动的情况下应用各种修复程序,无论是从REPL还是使用C-C-C重新编译某些功能

连接到远程Slime服务器:
  • 在服务器上安装公共Lisp实现。(如sbcl、clisp等)
  • 在服务器上安装quicklisp
  • 使用
    加载SWANK(ql:quickload:SWANK)
  • 使用
    (swank:create server)
    启动服务器。默认端口是4005。[在本地计算机上]使用SSH-L4005:127.0.0.1:4005[远程计算机]创建SSH隧道
  • 使用
    M-x slime Connect
    连接到正在运行的远程swank服务器
  • 主机应为127.0.0.1,端口为4005

(正在阅读一个旧的SO文档页面,现在无法链接)。

哦……你能在评论中链接到视频吗?但是……我知道这段视频,我经常链接到它:)(土豆:类似Slack的内置CL和ClojureScript,具有一系列功能)很高兴看到你还在。不过,这段视频有点长,如果你有一段短一点的视频,或者你写了一篇关于你的工作流程的视频,那就太棒了。我们没有太多的展示(特别是网络内容)。这是一个很好的观点,我同意这是必要的。像Emacs Rocks这样的东西,但是对于CL来说。你想过做这样的事情吗?我对CL的视频没有足够的信心(…还没有?)。在学习过程中,我贡献了文档,特别是在CL食谱中(已经提交了90次:)。我现在正在尝试网络抓取和生态系统中的其他东西,首先要学习,同时还要在此过程中编写教程。我可以做个录像。或者添加大量的GIF:)您是否知道是否有可能自动完成此热插拔?假设有人知道只有几个文件的源代码发生了更改。他将如何以Lisp方式将它们部署到生产中?Lisp中的连续部署类似于什么?:)谢谢你的提问。我在CL食谱中打开了一个问题,并从我的答案中获得了信息。顺便说一下,这本食谱看起来真的很有用。我一定会仔细阅读,甚至会有所贡献!你对阅读的顺序有什么建议吗?我认为你确实应该阅读数据结构,其余的根据需要阅读。是的,请贡献,这是有空间的,我们应该按照我们所学到的去做,否则没有人会去做。你可以写一些东西,看看问题,或者如果缺少什么东西,就填一个(错误处理,…)。再见!顺便问一下,cookbook中的文章应该严格按照Lisp编写,还是可以使用特定的工具(Emacs、特定的web服务器,如Clack、Caveman2等)?它的目标是“把事情搞定”,所以是的,绝对是的,因为已经有关于Emacs的东西(编辑器支持->Emacs),需要更新,我们讨论web开发时遇到了一个问题!非常感谢。顺便问一下,C-C-C是怎么工作的?当我添加路由时,我试图用它在本地重新编译我的web项目,但它不断地将我带到调试器,在那里我可以选择大约三个选项。另外,如果您对资源有任何建议,可以向初学者解释如何做像这样实用的东西,我很想了解他们。恐怕我不能在不看到你的应用程序和错误的情况下谈论C-C-C。保持冷静,一步一步地进行:)你可能需要C-C-C你的asd定义和快速加载你的项目。我从和中学到了很多,然后我建议不要错过以下资源:和。
(defun start-app (&optional (port 8080))
  (handler-case (swank:create-server :dont-close t)
    (error ()))
    …