当前位置:首页 >> 机械/仪表 >>

CAD Lisp


5.8 调试程序

5.8.1 概述
语法正确并不能保证程序正常运行,在运行时可能会产 生错误的结果或者发生程序崩溃的现象,这就需要进行调试。 调试程序的步骤是: (1)控制程序在指定的位置暂停; (2)查看、分析有关变量的值; (3)修改程序的源代码;

(4)继续或重新运行程序;
(5)如果程序不能正常运行,则继续

调试程序,直至程序正 常运行。

为了便于调试程序,帮助用户迅速查找并改正程序中的
错误。VisualLISP提供了监视窗口、检验窗口、符号服务对

话框、中断和继续执行程序的模式、命令跟踪、跟踪堆栈、
跟踪窗口等调试程序的工具。通过图6-1所示的工具栏或图62所示的菜单可以调用有关调试程序的工具。

图6-1 视图和调试工具栏

图6-2 视图和调试菜单

5.8.2 监视窗口

监视窗口用于监视变量、函数在程序运行过程中的结果。
选择菜单视图→监视窗口或单击图标 示的“监视”窗口。 ,将弹出图6-3所

图6-3监视窗口

1) 监视窗口的工具栏
监视窗口的工具栏有四个图像按钮,从左至右依次是: 添加监视:将新的变量加入到监视窗口。 清除变量:清除监视窗口内的所有的变量。

排序:将监视窗口内的变量名按字母顺序排序。
复制到跟踪/日志:将监视窗口的内容复制到跟踪窗口。 如果打开了日志选项,监视窗口中的这些内容也将被复制到跟踪日志文件。

2) 监视窗口的快捷菜单
选择监视列表中的某一项并单击鼠标右键,可显示图6-4所示监视窗口 的快捷菜单。

图6-4监视窗口的快捷菜单

3) 将变量加入到监视窗口
有三种途径可以将新的变量加入到监视窗口。

(1) 点取工具栏上的添加监视按钮

,在随后弹出的图6-5所示的添加

监视窗口内填入变量名,然后单击确定按钮。

图6-5添加监视窗口 (2)亮显要添加的变量名,然后点取工具栏上的添加监视按钮 ,随后

弹出的图6-6所示的已填写了该变量名的添加监视窗口,然后单击确定按钮。 (3)将光标移至将要添加的变量名,单击鼠标右键,在随后弹出的快捷菜单 上选取添加监视菜单项,将弹出已填写了该变量名的添加监视窗口,然后单 击确定按钮。 4) 监视变量的值 监视列表的每一行的格式是"变量名=变量值",例如:A = 1。如果程序 尚未运行,变量的值是空的;随着程序的运行,在监视窗口可以看到变量的 值也在不断变化。

5.8.3 利用断点和监视窗口调试程序
首先检查该程序是否存在语法错误。选择菜单工具?检查编辑器中的文字或单 击按钮 ,在编译输出窗口显示;检查完成。说明该程序没有语法错误。 ,VisualLISP自动

选择菜单工具?加载编辑器中的文字或单击按钮

将控制切换到AutoCAD界面。当出现输入矩形的一个角点:的提示时,输入 (0,0)点,该点是p1点的坐标;当出现输入矩形的对角点:的提示时,输入 (100,100)点,该点是p2点的坐标。程序运行结束,只得到了矩形的两条边, 显然,这不是预期的运行结果。

图6-6监视P1、P2、P3、P4点的值

5.8.3.1 利用监视窗口调试程序
下面演示如何利用监视窗口调试程序。调试程序的步骤如下: (1)确定要监视的变量。选择菜单调试?添加监视或单击图标 ,在随后

弹出的添加监视对话框内填入变量名p1,然后单击确定按钮。同样的操作将 变量P2、P3、P4添加到监视窗口。

(2)从图6-6所示的监视窗口可以看到:P1 = (30.0 0.0 0.0)、P2 = (100.0 0.0)
、P3 = (100.0 40.0 0.0)、P4 = (nil 40.0)。由于p1、p2和p3点的X和Y坐标都是 数值,所以这3个点是有定义的,而p4点的X坐标为nil,说明p4点的定义有错

误。p4点的X坐标是(car pl)的返回值,检查(car pl),car是正确的,选取pl,
单击添加监视图标,监视窗口内出现PL = nil,PL本不是该程序的变量,是 p1的误写。 (3)修改源程序代码,将pl改写为p1;重新加载、运行该程序;直到该程序 可以正常运行,调试结束。

5.8.3.2 在不设置断点的情况下分步调试程序
分步调试就是将一个完整的程序分为若干步,逐步调试。每步可以是 最内层的一个表达式,也可以是一个复杂的表达式,还可以是多个表达式。 可以通过设置断点将程序分为若干段,也可以不用断点而是通过步长将程 序分为若干步。 结合下例程序介绍几种调试程序的方法。 【例6.1】 定义绘制矩形的命令,矩形的一个角点、宽、高和旋转角为交 互输入的参数。 h 程序的源代码如下: h p3 (defun c:rectr(/ w h alf p1 p2 p3 p4) (setq p1(getpoint "输入矩形的一个角点:") w (getdist p1 "输入矩形的宽:") h (getdist p1 "输入矩形的高: ") alf (getangle p1 "输入矩形的旋转角: ") )

p4 alf p1 p2

(setq p2(polar p1 alf w))
(setq p3(polar p2 (+ alf (* 0.5 pi)) h)) (setq p4(polar p3 (+ alf pi) w)) p3 h

(command "pline" p1 p2 p3 p4 "c")
(princ) )

p4 alf p1

p2

方法一:从第一个表达式开始,逐步调试程序
(1)将例6.1所示源代码录入文本编辑窗口。选择菜单调试? 添加监视或单 击按钮 ,监视变量w、h、alf、p1、p2、p3、p4。选择菜单工具? 加载 编辑器中的文字或单击按钮 ,加载该程序。 (2)通过菜单调试? 立即停止 ,使之处于打开的状态。 (3)单击按钮 入rectr命令。 ,切换到AutoCAD窗口,在AutoCAD的命令:提示下,键

控制自动切换到VisualLISP文本编辑窗口,监视窗口内的

变量值均为nil。此时光标停在(defun之前,整个程序被加亮显
示 。 选取 菜单 调 试 ? 下一嵌套 表达式 项 、 F8功能 键或单击 按 钮 ,光标停在(setq p1之前,与之匹配的右括号之间被加亮 ,光标停在(getpoint "输入矩形的一个角

显示。单击按钮

点:")之前,并亮显该表达式。注意,指示按钮内的I在()之 前。 单击按钮 ,程序切换到AutoCAD窗口,出现输入矩形的

一个角点: 的提示,输入(100,80),程序切换到VisualLISP的
文本编辑窗口。光标停在(getpoint "输入矩形的一个角点:") 之后,仍然亮显该表达式。指示按钮内的 I 在 () 之后。

单击按钮

,光标停在(getdist p1 "输入矩形的宽:")之前,并亮显

该表达式。指示按钮内的"I"回到"()"之前。监视窗口内的变量p1=[100.0 80.0 0.0]。重复类似的操作,在AutoCAD窗口输入矩形的宽度为200、高度

为150,旋转角为30。在操作过程中指示按钮随时显示着光标相对于表达式的 位置,监视窗口显示着这些变量的当前值(注意,alf的单位为弧度)。也说 明单击按钮 只执行了一步表达式求值。 ,图标内的I在 ,执行

当光标停在(setq p2(polar p1 alf w))之前时,单击图标

()之后,监视窗口显示p2=[273.205 180.0 0.0]。说明单击图标 了一个完整的表达式。

当光标停在(setq p3(polar p2 (+ alf (* 0.5 pi)) h))之前时,选取菜单调试? 跳 出、Ctrl + Shift + F8功能键或单击图标 ,整个程序被加亮显示,光标停

在整个程序的结尾,再单击以上任一图标,程序运行结束。 切换到AutoCAD窗口,显示着刚才绘制的矩形。

假定程序的第5行误写为 (getangl

p1 “输入矩形的旋转

角: ”),仍旧用上述的方法调试该程序,当执行到输入矩形的

旋转角: 时,将出现提示; 错误: no function definition:
GETANGL(没有GETANGL这个函数定义) 。点取查找按钮 ,

在随后弹出的查找对话框的编辑框输入查找内容为 GETANGL, 单击查找按钮,找到getangl并改正为getangle。 重新调试程序,直至程序正常运行。

方法二:自动分步调试程序
将例6.1源代码录入文本编辑窗口,将程序第5行的getangle 改为etangle。监视变量w、h、alf、p1、p2、p3、p4。加载该程 序。选择菜单调试?自动执行。 在AutoCAD的命令提示下,键入rect2。Visual LISP自动切换到

文本编辑窗口。随着光标的位置、图标

内I和()的变化,

自动地执行每一个表达式的求值,监视窗口内的变量值也相应 地改变。如果遇到了错误的函数调用,程序停止运行,并在

AutoCAD的命令提示区报告; 错误: no function definition:
ETANGLE信息。找到ETANGLE并改正后继续调试程序,直至 程序正常运行。

(2)设置每步延迟的时间
选择菜单工具?环境选项?基本选项,弹出基本选项对话框 。单击该对话框的诊断选项卡,通过该选项卡的自动执行延时

编辑框可以设置每步延迟的时间(以毫秒为单位),见图6-7。

图6-7基本选项对话框的“诊断”选项卡

5.8.3.3 利用断点调试程序
运行的程序遇到断点时,将产生一个中断。当程序中断时, 可查看、分析变量的值,修改程序的源代码。利用断点可提高 调试程序的效率。 1. 有关断点的操作 (1)在程序中设置/删除断点 只能在VisualLISP的文本编辑器窗口内设置断点。断点应位 于表达式的左、右括号上。设置断点的步骤如下: ① 将光标移到需要程序暂停的位置。例如,需要在某表达式

之前暂停,则应将光标移至与表达式的左括号相邻的位置。

② 选择菜单调试→切换断点、单击图标

、按F9键

或者单击鼠标右键在快捷菜单中选择切换断点,设置或 删除断点。如果光标不与括号相邻,Visual LISP就会提 出光标位置不合法的警告。

③ 选择菜单调试→清除所有断点或按Ctrl+Shisf+F9键
将删除已设置的所有断点。

2. 利用断点调试程序实例
【例6.2】 定义绘制图6-10所示图形的命令,p0、d、b、t1、alf是交互输 入的参数。

图6-10轴的键槽部位截面 程序源代码如下: (defun c:tuxing (/ p0 alf d b t1 r l b1 sit p1 p2 p3 p4 p5) (setq p0 (setq d (getpoint "\nEnter P0: ")) (getdist p0 "\nEnter d: "))

(setq b
(setq tl

(getdist p0 "\nEnter b: "))
(getdist p0 "\nEnter t1: ")) ;tl应改为t1

(setq alf (getangle p0 "\nEnter alf: ")) ;断点1的位置

(setq r (* 0.5 d) bl (* 0.5 b))
(setq l (sqrt (- (* r r) (* b1 b1)))) (setq sit (tan b1 l)) ;tan应改为atan

(setq p1 (polar p0 (+ alf sit) r))
(setq p2 (polar p0 (+ pi alf) r)) (setq p3 (polar p0 (- alf sit) r)) (setq p4 (polar p3 (+ pi alf) (- (+ r l) t1))) (setq p5 (polar p1 (+ alf pi) (- (+ r l) t1))) (command "pline" p1 "a" "s" p2 p3 "l" p4 p5 "c") )

将例6.2所示源代码录入文本编辑窗口。单击图标 ,编译输 出窗口显示捡查完成,说明没有语法错误。通过图标 监视变 量p0、d、b等所有变量。由于程序尚未运行,因此这些变量的值 都是nil。 单击图标 ,加载该程序。单击图标 ,在AutoCAD的 命令提示下键入TUXING命令。按照提示输入p0、d、b、t1、alf 的值之后,程序停止运行,出现; 错误: 参数类型错误: numberp: nil的提示。 单击图标 ,在第7行的末尾设置一个断点。加载该程序, 在AutoCAD的命令提示下键入TUXING命令。输入p0等变量的 值之后,程序返回到文本编辑窗口。光标停留在第7行末尾的断 点。在监视窗口看到变量p0 d b t1 alf r b0已有定义,说明前7行 没有参数类型错误。单击图标 ,程序停止运行,仍然出现 ; 错误: 参数类型错误: numberp: nil 的提示。

通过图标

,清除第7行的末尾的断点。在第8行和第9行

的末尾各设置一个断点。加载该程序,在AutoCAD的命令提示
下键入TUXING命令。输入p0等变量的值之后,程序返回到文 本编辑窗口。光标停留在第8行末尾的断点。在监视窗口看到 变量l已有定义,说明第8行没有参数类型错误。单击图标 ,

程序停止运行,仍然出现; 错误: 参数类型错误: numberp: nil 的提示。由于光标没有停留在第9行末尾的断点,说明程序在 执行第9行时出现了参数类型错误。仔细查看第9行的变量,发

现b1的数字1被错写为字母L。

改正第9行的错误之后重新加载、运行程序,输入p0等变量 的值之后,光标停留在第8行末尾的断点。单击图标 ,光标停 留在第9行末尾的断点,在监视窗口看到变量sit已有定义。再次 单击图标 ,程序运行结束,得到图6-10所示的图形。 光标在本此例的断点暂停时,图标从 到 都处于可用

状态,说明此时处于可继续的断点循环。
如果在命令提示下,键入TUXING,

在要求用户输入数据时,按下Esc键, 程序停止运行,此时将产生一个不 可继续的断点循环。
图6-10

在此例中,在断点1暂停时,调试按钮从
用状态,因为此时处于可继续的断点循环。



都处于可

如果运行该程序前,选择菜单Debug?Break On Error,执行 到"tan"函数时,因出现了无定义的函数而程序崩溃,但在该处 产生了一个不可继续的断点循环。此时只有调试按钮 和

是可用的。用户只能选择退到上一层断点循环还是退到顶层断 点循环。

如果在命令:提示下,键入TUXING命令,在要求用户输入数
据时,按下"Esc"键,程序停止运行,此时也产生了一个不可继

续的断点循环。

?练习1:写出在AotuCAD编辑状态中运行函数tu时,在屏 幕图形区和文本区的显示结果。

(defun tu ( / pc1 pc2 pc3 r ) (setq pc1 (list 50.0 50.0)) (setq r 20 ) (setq pc2 (polar pc1 (/ pi 2) (* r 2))) (setq pc3 (polar pc2 pi (* r 2))) (command "circle" pc1 r ) pc2 pc3 (command "circle" pc2 r ) (command "circle" pc3 r ) (command "line" pc1 pc2 pc3 "c" ) (princ pc1) (princ pc2) pc1 (princ pc3) (princ r) ) 文本区:(50.0 50.0) (50.0 90.0) (10.0 90.0) 20

?练习2:定义输入矩形的对角点绘制矩形的命令函数。 p4 p1 p3 p2

(defun c:rect (/ p1 p2 p3 p4) (setq p1(getpoint "\n输入矩形的一个角点:")) (setq p3(getpoint "\n输入矩形的另一个角点:")) (setq p2(list (car p3)(cadr p1))) (setq p4(list (car p1)(cadr p3))) (command "pline" p1 p2 p3 p4 "c") )

?练习3:用AutoLISP语言编写一个名为“tuxing”的自定义命 令函数。要求执行此函数时使用键盘输入一个圆的圆心坐标和 半径值,然后自动绘出该圆、两条中心线和与该圆同心的正方 形(边长等于圆的半径)。 c:tuxing ( / pc r p1 p2 p3 p4 xc yc) (defun p3 (setq pc (getpoint "\n 输入圆心坐标点:")) p8 p7 (setq r (getreal "\n 输入圆的半径:")) (setq p1 (polar pc pi (+ r 3))) (setq p2 (polar pc 0 (+ r 3))) p1 p2 (setq p3 (polar pc (/ pi 2)(+ r 3))) pc (setq p4 (polar pc (/ (* pi 3) 2) (+ r 3))) (command "circle" pc r) (command "line" p1 p2 "") p5 p6 (command "line" p3 p4 "") p4 (setq xc (car pc) yc (cadr pc)) (setq p5 (list (- xc r) (- yc r))) (setq p6 (list (+ xc r) (- yc r))) (setq p7 (list (+ xc r) (+ yc r))) (setq p8 (list (- xc r) (+ yc r))) (command "line" p5 p6 p7 p8 "C") )

?练习4:编写参数化绘制平键的Autolisp自定义函数。

p6

p2

p10

p5 p1
r

p0
p p4 p8
alf

p3 p7

l1

b
l

p9

?练习5:编写参数化绘制带键槽的轴段横截面图形的 Autolisp自定义函数。


相关文章:
超经典CAD_lisp程序集锦、CAD快捷键大全
超经典 CAD lisp 程序集锦 如果您使用 AutoCAD,下面的内容对您一定有帮助。在某些方面能大大提高 您的工作效率。下面的程序均以源程序方式给出,您可以使用、参考...
CAD中加载lisp等应用程序的方法
CAD 中加载 lisp 等应用程序的方法时间:2011-07-26 15:51 来源:www.tobelazy.com 作者:懒人之家 点击: 504 次在 CAD 中加载 lisp 等应用程序的方法有下列...
CAD创建Lisp程序步骤
使用Visual LISP 创建简单的 LISP 应用程序作者:佚名 点击数:1523 更新:2007-2-2 7:08:10 热★★★ 【字体:小大】 a> 本节通过一个简单的实例来讲述 ...
CAD中LISP程序使用方法
CADLISP程序使用方法_计算机软件及应用_IT/计算机_专业资料。cad lisp使用方法,经典CADLISP 程序使用方法 2007-08-06 19:13:32| 分类: 学习园地 |字号 ...
超经典CAD lisp程序集锦、CAD快捷键大全
超经典CAD lisp程序集锦、CAD快捷键大全_建筑/土木_工程科技_专业资料。超经典CAD lisp程序集锦、CAD快捷键大全 超经典 CAD lisp 程序集锦 如果您使用 AutoCAD,...
CAD中添加LISP
CAD 技巧:中望 CAD 中加载 LISP 程序 1、首先请加载 lisp 程序,加载方法如下: 在菜单栏选择 工具——加载应用程序——添加, 选择 lisp 程序然后加载, 然后...
CAD画缓和曲线lisp程序
CAD画缓和曲线lisp程序_建筑/土木_工程科技_专业资料。线路设计必备,可自行调整曲线拟合长度 CAD 中画缓和曲线,首先复制本文☆后面的源程序保存至 cad 安装目录的 ...
怎样在启动CAD时自动加载LISP的工具盒插件
怎样在启动 CAD 时自动加载 LISP 的工具盒插件摘要: 设计师在使用 CAD 软件时时常会外挂一些 LISP 格式的工具盒插件, 用于简化设计步骤, 在浩辰 CAD 软件外挂...
autocad lisp教程
autocad lisp教程_计算机软件及应用_IT/计算机_专业资料。autocad lisp教程 ...用 CAD 抽出第 1 个元素(像素名称),作为 ENTGET 的参数以取得像素数据,存入 ...
更多相关标签:
lisp | cad lisp 教程 | cad lisp程序下载 | cad lisp 插件 | cad lisp编程 | cad lisp文件 | cad lisp程序免费下载 | cad lisp病毒 |