明经通道 发表于 2012-9-29 18:04:02

第四章 在 Visual LISP 中调试代码(一)断点 分步执行 自动执行

第四章 在 Visual LISP 中调试代码

本章将重点讨论如何使用Visual LISP的测试和调试工具帮你尽早发现代码中的问题,以使得你的代码尽量少缺陷。调试对于成功的代码开发是非常重要的,就好象给你的庭院除草一样重要。它有时是乏味的和讨厌的,但如果忽视它或不做将给你带来更大的烦恼。

你越早熟悉和喜欢使用调试工具,你就会越早成功。至少可以提高代码质量以及令你的用户满意度更高 (你可以让那些你付费的人满意而不是去让他们伤心)。

断点
断点是在代码中放置标识的工具,它可以使程序在执行中自动触发暂停,如果你的代码在执行到某一部分出现问题,那就在这一段的开始处设一个断点,并运行代码直到它到这个断点位置。然后你就可以使用以下一个或多个工具有条不紊地去仔细研究程序,找出问题,在短时间内解决它。

示例:加载ERRORTEST1.LSP代码文件,如下图4-1中,在一个已经含有几个圆、圆弧和直线图元的图形中运行GETPROPS命令。


图4-1 ERRORTEST1.LSP 示例代码

你会注意到,当你选定一个直线图元时,代码将崩溃并出现出错信息:
“错误: ActiveX 服务器返回错误: 未知名称: Diameter”。

当你选择文字或点对象时,同样的问题也会发生,也许你在示例的代码中已经发现了引起这个错误的原因,但让我们假设这是个非常复杂的代码,以致你不容易通过查看代码就发现错误。那你怎么办?在代码中设置一个断点,加载后再运行它一次。这一次,当运行到代码中的断点位置时,程序暂停了,那你就可以用Visual LISP IDE提供的大量工具来开始调试这段代码程序了。这其中的一个工具叫“分步执行”。

把你的编辑光标直接放到包含有(setq lay......)这一行的前面,并按下F9键,或选择键,在该位置切换断点为“开”,你将会看到左括号“(”底色变为红色。这就是由VLISP IDE编辑器提供的非常有用的可视化辅助功能。一旦你切换了断点为“开”,就可以用 接钮或按CTRL+ALT +E在AutoCAD中加载代码再运行一次。


图4-2 ERRORTEST1.LSP在第6行设置的断点

现在,当你运行GETPROPS命令并选择一个图元时,它就会在断点位置停下来并跳回到VLISP IDE编辑器中去等待你下一个命令。这里你会注意到有些东西有点不一样了。首先,包含有相匹配括号的那段代码被高亮显示了,而且,你会发现调试工具栏的按钮被激活了(不再是灰色)。这个工具栏是你继续调试你的程序的主要工具。



左边的头三个按钮是分步控制按钮(下部分再详述),接下来是“继续”、“退出”和“重置”按钮,再接下来三个是“切换断点”、“添加监视”和“上次中断”按钮,最后一个是断点中断状态按钮,最后这个按钮只是显示一个可视化队列来显示当前过程是停在所匹配的子括号的前面还是后面。这样可帮助你知道该错误是在这个语句之前产生的还是在运行了这个语句后产生的。

继续选择“下一嵌套表达式”按钮。一直点击该按钮看看这个代码是如何一次执行一个语句。这将一直继续下去直到碰到出错的语句。这时,执行失败,并且显示错误信息。

我们希望你会发现产生这个错误的原因是这个代码假设了某些属性是有效的却没有首先判定它们是否有效。当选取直线图元时,Diameter(直径)属性很明显是无效的。同样当选取圆图元时,Length(长度)属性也是无效的。

分步执行
正如你可以从上述例子中推测到的,分步执行就是一次执行一行或一句代码。这可以使你暂停执行并在程序进行中提前控制进度直到你在代码中发现要检查的点或错误或特殊的条件。

你可以按“下一嵌套表达式” 、“下一表达式”或“跳出”。这些是所有编程语言中通用的分步执行方法,并不仅仅是Visual LISP中所独有。

“下一嵌套表达式”:在进行下一个表达式或语句前,按照先从下一表达式的最深处的嵌套语句到最外面的语句的求值方式来继续前进执行。

“下一表达式”:跳过当前高亮的语句块并提早执行下一个表达式或语句。

“跳出”:跳过断点块,前进到下一个表达式或语句。如果除了这个点外没有其它断点了,就继续不间断的执行。

自动执行
分步执行的另一种方法是使用自动执行。此特性如平常一样执行代码,只是在每一表达式被求值时会停顿,并在编辑器窗口中高亮显示代码块。每个停顿后,代码就自动前进到下一表达式,暂停是通过时间延迟值来处理,你可根据你的需要和喜好来调整。



http://bbs.mjtd.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 明经通道的微博

丶吟游诗人灬 发表于 2023-4-7 09:25:03

感谢对CAD自带编辑器有了更深一步的了解以前懵懂的地方都豁然开朗了

吾一岁就很帅 发表于 2023-8-23 21:15:17


一直想学习一下关于lisp的调试资料,谢谢楼主了

smartstar 发表于 2012-10-1 16:10:40

向老大致敬!

pslstar 发表于 2012-10-1 22:45:50

向老大致敬!

城市的邊緣 发表于 2014-9-23 14:30:44

向老大致敬!

ltrliu 发表于 2015-8-11 09:47:35

向老大致敬!

894560869 发表于 2018-7-23 14:50:19

仰慕

monsterWu 发表于 2018-8-19 21:18:12

感謝分享教材,收藏研究

20060510412 发表于 2018-11-11 10:12:57

一直想学习一下关于lisp的调试资料,谢谢楼主了

20060510412 发表于 2018-11-13 16:18:31

这是什么书呢,在哪里能买到呢

mycad 发表于 2019-1-4 16:41:44


向老大致敬!
页: [1] 2
查看完整版本: 第四章 在 Visual LISP 中调试代码(一)断点 分步执行 自动执行