经常提到的Common Lisp独有的功能之一就是" hot"调试。也就是说,它能够调试,编辑和重新编译生产代码,而无需停止或取消后者。
虽然我一直看到这个提到,但我还没有看到如何做到的教程。
如何在Emacs中做到这一点?有一些简单的例子吗?这个功能真的像看起来一样神奇吗?
答案 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重新编译某些功能。
(ql:quickload :swank)
(swank:create-server)
启动服务器。默认端口为4005. [在本地计算机上]使用ssh -L4005创建SSH隧道:127.0.0.1:4005 [远程计算机] M-x slime-connect
连接到正在运行的远程swank服务器。 (阅读旧的SO文档页面,现在无法链接)。