debugging - 从 REPL 访问 Hunchentoot 请求对象以进行调试

标签 debugging lisp common-lisp hunchentoot

我发现在为 Hunchentoot 编码时,增量开发往往会中断。

例如,我可能会编写一个由几个函数组成的网页。如果这些内部函数之一包含对 - 比如说 - hunchentoot:post-parameters* 的调用,那么我就无法轻松地在 REPL 中测试该函数。它会出错,因为 *request* 不存在,除非该页面被网络客户端调用。

如果存在一些函数或其他源,这样我就可以测试我的函数,那就太好了:

>(let* ((*request* (get-previous-request-from-somewhere))
       (*session* (slot-value *request* 'hunchentoot:session)))
    (my-function <whatever params>))

它或类似的东西是否存在?我是否忽略了更好的调试方法?

最佳答案

我的临时解决方案如下所示:

(defparameter *save-last-request* t)
(defvar *last-request* nil)

(defun store-request ()
  (when *save-last-request*
    (setf *last-request* *request*)))

(defmacro with-last-request (&body body)
  `(let* ((*request* *last-request*)
      (*session* (slot-value *request* 'hunchentoot:session)))
    ,@body))

注意每个处理程序都需要调用 store-request

关于debugging - 从 REPL 访问 Hunchentoot 请求对象以进行调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22903139/

相关文章:

javascript - 什么是良好的独立于浏览器的 JavaScript 编程环境?

algorithm - Lisp:如何从列表中包含的列表中获取元素的所有可能组合?

macros - 不带 eval 取消引用

java - 当程序在 Debug模式下运行时,有什么方法可以查看 java 程序中数组的内容吗?

c++ - cout 函数调试断言失败

list - 为什么我得到变量 'list' 没有值?

clojure - 尝试和测试 Lisp 语法的简单方法?

macros - 如何在一个宏调用中分配多个常量

facebook - 如何清除调试工具缓存数据?

printing - lisp 中 princ、print 和 prin1 之间的区别?