Debugging 如何描述要(跟踪)的本地函数?
在common lisp中,函数(跟踪名称)可用于查看有关函数调用的输出 如果我的函数是用局部作用域声明的,我如何描述它以进行跟踪 例如,如何跟踪栏,如下所示:Debugging 如何描述要(跟踪)的本地函数?,debugging,common-lisp,trace,Debugging,Common Lisp,Trace,在common lisp中,函数(跟踪名称)可用于查看有关函数调用的输出 如果我的函数是用局部作用域声明的,我如何描述它以进行跟踪 例如,如何跟踪栏,如下所示: (defun foo (x) (labels ((bar (y) (format t "bar: ~a~&" y))) (bar x))) ANSI Common Lisp没有定义使用(TRACE…跟踪本地函数 有些实现有这样做的扩展。例如,见 除此之外,还需要在FOO的定义中添加一些代码。例如,有一个
(defun foo (x)
(labels ((bar (y) (format t "bar: ~a~&" y)))
(bar x)))
ANSI Common Lisp没有定义使用
(TRACE…
跟踪本地函数
有些实现有这样做的扩展。例如,见
除此之外,还需要在FOO的定义中添加一些代码。例如,有一个宏可能很有用,这样您就可以将对bar的调用编写为(trace it(bar x)),宏将扩展为打印入口和出口的代码。由于没有跟踪本地函数的标准方法,我解决问题的方法是编写一个实现跟踪的
跟踪标签宏,转换以下内容:
(defun foo (x)
(tracing-labels ((bar (y) (format t "bar: ~a~&" y)))
(bar x)))
变成这样:
(defun foo (x)
(labels ((bar (y)
(format *trace-output* "~&ENTER: ~S" 'bar) ;'
(multiple-value-prog1
(progn (format t "bar: ~a~&" y))
(format *trace-output* "~&LEAVE: ~S" 'bar)))) ;'
(bar x)))
本地函数没有跟踪,没有文档字符串,没有对其父函数的独立重新定义。你放弃了很多。出于这个原因,他们最好有一个很好的理由成为当地人:这个很好的理由是。。。鼓轮。。。需要访问父函数的词法环境。上面的条
功能不可用;它可以简单地移动到foo
之外,作为顶级函数独立运行。