明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 菜卷鱼

[源码] 代码查错程序,源码

[复制链接]
发表于 2020-9-3 10:00:14 来自手机 | 显示全部楼层
真牛,不过不会用
回复 支持 1 反对 0

使用道具 举报

发表于 2020-9-3 18:55:20 | 显示全部楼层
晓东老大主持了大家讨论,使用(vl-bt),可查出错误,我一直使用这个方法,不用编程
发表于 2020-9-5 20:01:28 | 显示全部楼层
多谢酸菜鱼,每次
发表于 2020-10-8 16:10:25 | 显示全部楼层
试试,看行不行先
发表于 2020-10-8 22:40:22 来自手机 | 显示全部楼层
请问(setq lst (eval (cons list lst)))是为了做什么呢?
 楼主| 发表于 2020-10-10 09:11:11 | 显示全部楼层
Zrrrrr 发表于 2020-10-8 22:40
请问(setq lst (eval (cons list lst)))是为了做什么呢?

为了写局部变量的时候可以用  ' (...) 代替 (list ... ) 做成表

比如
(setq a 1 b 2 c 3)

(mapcar 'princ  '(a b c ))
返回ABC
(mapcar 'princ  (eval (cons list  '(a b c))))
就会返回123

你直接写,肯定更费力,但是用于局部变量,就好用多了

像我附上的那个 prlst
就可以 (prlst '(a b c)) ,(prlst (list a b c))也行
如果没加上 (eval (cons list lst)) 这一句
就必须得 (prlst (list a b c))

回复 支持 1 反对 0

使用道具 举报

发表于 2020-10-12 14:14:35 | 显示全部楼层
顶一下,,谢谢楼主的分享
发表于 2020-10-13 09:40:20 | 显示全部楼层
本帖最后由 llsheng_73 于 2020-10-13 09:42 编辑

(vl-bt)第一次看到,不过试了下不知道怎么用,这个run 比较巧妙,不足之处是不管有多少错误,它始终只查第一处错误,不能识别嵌套语句内部错误(非第一层),也就无法对自定义函数带参数检查内部错误

对于非嵌套语句,改写了一下,可以一次性把所有错误查出来
  1. (defun run (exprs / n)
  2.   (setq n 0)
  3.   (princ(apply'strcat(mapcar'(lambda(x / a)
  4.             (setq n(1+ n))
  5.             (if(vl-catch-all-error-p(setq a(vl-catch-all-apply'eval(list x))))
  6.               (strcat"\n第"(itoa n)"个表达式"(VL-PRINC-TO-STRING x) "\n报错:"(vl-catch-all-error-message a))""))
  7.          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出错中断好用

评分

参与人数 1明经币 +1 金钱 +50 收起 理由
菜卷鱼 + 1 + 50 学习了,这么多年现在才知道 (lambda(x / a.

查看全部评分

发表于 2020-10-13 10:06:40 | 显示全部楼层
自贡黄明儒 发表于 2020-9-3 18:55
晓东老大主持了大家讨论,使用(vl-bt),可查出错误,我一直使用这个方法,不用编程

黄大师,这个是发帖讨论的话,给个入口呗!
 楼主| 发表于 2020-10-13 17:44:15 | 显示全部楼层
llsheng_73 发表于 2020-10-13 09:40
(vl-bt)第一次看到,不过试了下不知道怎么用,这个run 比较巧妙,不足之处是不管有多少错误,它始终只查第 ...

我的初衷不是这个,
主要是想用catch-error ,然后可以把这段写进我的另外的程序里,
可以看到我的这个run是有返回值的,

只是突然来灵感把它改成了查错程序
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-16 02:34 , Processed in 0.191451 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表