远程开发调试与hot-update

Common Lisp开发中一个狠锋利的特性就是他的动态性,以及全程的可用性。体现的狠明显的一点是:一个lisp程序在运行中,也可以狠方便的连接上进行调试和升级,而不需要暂停服务。
也就是具有“热升级”的能力。

要实现这个功能,就要靠SLIME + Emacs 这对黄金搭档了。

废话不多说,直接看看它在实际使用中是什么样子的:

1. 服务器(当然是 Unix 系的),上面运行Common Lisp的程序,在程序中启动一个 swank 服务器。swank就是slime的服务端。比如一个项目的启动脚本如下:

;; SLIME & Swank
(loadlib "swank")
(swank:create-server :port 4006 :style :spawn :dont-close t)
 
(loadlib "Your-Project")
(Your-Project:start-server)

2. 你本地的客户端, Emacs + slime 插件

3. ssh管道。 由于swank的服务器绑定的是localhost,因此不能直接远程连接,通过创建一个ssh管道将服务器上的端口绑定到本机:

ssh -L 4006:localhost:4006 your-server

 

一个典型的远程调试的使用方法:

在Emacs中,打开slime,执行:

slime-connect localhost 4006

下面就可以打开一个Lisp 文件,进行调试了。这个时候,我们可以根据需要,打开一个本地的文件作为 patch ,也可以在emacs中通过 TRAMP远程编辑服务器上的源代码。在我们编辑或者增加一个函数后,通过 Ctrl-c-c 就可以Eval 一段新的函数定义。然后,我们的服务程序就被hot-update 了。

也可以通过 slime-inspect 远程连接到这个swank服务器,查看各种变量的情况。

上面是远程调试的情况,如果你觉得还不够的话,就直接把源代码扔在服务器上,在Emacs中远程编辑你的代码,然后直接通过slime更新到正在运行的进程中。这就实现了远程的开发。

===

本文配置参考:http://bc.tech.coop/blog/051227.html

要注意一点:代码中有utf8编码时,会导致连接被关闭。我正在查找解决方法,应该是设置下编码就能搞定。

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>