标签:
Common LISP自带单步跟踪功能,执行 (step 要跟踪的命令)即可。以sdraw为例,跟踪其执行。
【1】启动单步跟踪
SDRAW[60]> (step (sdraw ‘(a (b c d) c)))
step 1 --> (SDRAW ‘(A (B C D) C)) 显示下一个要执行的语句
Step 1 SDRAW[61]> 等待用户输入调试指令
【2】输入help查看帮助,帮助的内容很多,前面一大段和Debug是一样的。常用的指令有四个,Step表示进入表达式内部;Next表示快速执行当前表达式,并移到下一个表达式;Over表示从表达式返回,可以理解为从函数返回;Continue表示结束单步跟踪状态,快速执行完整个程序。注意一下,不是直接输入step等命令,而是输入简写“冒号加首字母”。
Step 1 SDRAW[61]> help
Step :s step into form: evaluate this form in single step mode
Next :n step over form: evaluate this form at once
Over :o step over this level: evaluate at once up to the next return
Continue :c switch off single step mode, continue evaluation
-- Step-until :su, Next-until :nu, Over-until :ou, Continue-until :cu --
same as above, specify a condition when to stop
【3】执行几步看看
Step 1 SDRAW[61]> :s 进入函数调用内部
step 2 --> ‘(A (B C D) C) 进入函数前,要求值每一个参数
Step 2 SDRAW[62]> :s
step 2 ==> value: (A (B C D) C) 显示上一条命令的执行结果
step 2 --> NIL 表达式是一个树状结构,这个分支已经没有命令了,显示为空
Step 2 SDRAW[63]> :s
step 2 ==> value: NIL 上一个表达式为空,执行结果也为空
step 2 --> 下面是函数sdraw的、复杂的实现,很多内容省掉了
(LET ((*SDRAW-CIRCULAR-SWITCH* #) (START-COL #)) (INIT-STRUCT1 START-COL)
(CLRHASH *CIRC-HASH-TABLE*) ...)
Step 2 SDRAW[64]>
【4】任何时候都可以查看变量的内容,输入变量名即可,也可以执行其他的表达式
【5】如果输入了错误的命令,会进入Debug状态,输入ctrl+d可以退出Debug状态
标签:
原文地址:http://my.oschina.net/u/188924/blog/490943