"热"通用LISP中的调试和交换

时间:2017-09-30 04:05:25

标签: lisp common-lisp

经常提到的Common Lisp独有的功能之一就是" hot"调试。也就是说,它能够调试,编辑和重新编译生产代码,而无需停止或取消后者。

虽然我一直看到这个提到,但我还没有看到如何做到的教程。

如何在Emacs中做到这一点?有一些简单的例子吗?这个功能真的像看起来一样神奇吗?

2 个答案:

答案 0 :(得分:4)

执行此操作的典型方法是在要调试的应用程序中启用SWANK。这样,您可以使用Emacs中的M-x slime-connect连接到正在运行的服务器。从那里,您可以使用普通SLIME会话执行任何操作。您甚至可以设置文件名重新解析的方式,这样当您使用M-.跳转到函数源时,它将使用Tramp在远程计算机上打开。

我认为你没有看到它的教程的原因是因为这是很自然的事情,并且在进行本地调试和在远程系统上工作之间确实没有什么区别。

我曾做过一次演讲的视频,其中我展示了其中一些,所以肯定会有视频。但是,我认为在Stackoverflow上不喜欢链接到外部视频。

答案 1 :(得分:3)

我为自己拍的一些笔记。我很同意我们应该有一个教程。在CL Cookbook

编辑:现在有一个more complete example here

阅读http://readevalprint.tumblr.com/post/101841449553/its-alive-the-path-from-library-to-web-app

  

另一种选择是热交换所有更改。为此,我的hunchentoot服务器也启动了这样的swank服务器:

(defun start-app (&optional (port 8080))
  (handler-case (swank:create-server :dont-close t)
    (error ()))
    …
  

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

连接到远程Slime服务器:

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

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