本帖最后由 llsheng_73 于 2020-10-13 09:42 编辑
(vl-bt)第一次看到,不过试了下不知道怎么用,这个run 比较巧妙,不足之处是不管有多少错误,它始终只查第一处错误,不能识别嵌套语句内部错误(非第一层),也就无法对自定义函数带参数检查内部错误
对于非嵌套语句,改写了一下,可以一次性把所有错误查出来
- (defun run (exprs / n)
- (setq n 0)
- (princ(apply'strcat(mapcar'(lambda(x / a)
- (setq n(1+ n))
- (if(vl-catch-all-error-p(setq a(vl-catch-all-apply'eval(list x))))
- (strcat"\n第"(itoa n)"个表达式"(VL-PRINC-TO-STRING x) "\n报错:"(vl-catch-all-error-message a))""))
- exprs)))(princ))
$ (run '((ALERT 2)(+ a 3)))
第1个表达式(ALERT 2)
报错:参数类型错误: stringp 2
第2个表达式(+ A 3)
报错:参数类型错误: numberp: nil
_$ (run '((ALERT)(+ a 3)(a 3)))
第1个表达式(ALERT)
报错:参数太少
第2个表达式(+ A 3)
报错:参数类型错误: numberp: nil
第3个表达式(A 3)
报错:no function definition: A
_$ (run '((ALERT"")(+ a 3)(a 3)))
第2个表达式(+ A 3)
报错:参数类型错误: numberp: nil
第3个表达式(A 3)
报错:no function definition: A
_$
另外,个人感觉不如VLIDE出错中断好用
|