- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
清华大学cad二次开发第6章
6.1 概述 语法正确并不能保证程序正常运行,在运行时可能会产生错误的结果或者发生程序崩溃的现象,这就需要进行调试。 调试程序的步骤是: (1)控制程序在指定的位置暂停; (2)查看、分析有关变量的值; (3)修改程序的源代码; (4)继续或重新运行程序; (5)如果程序不能正常运行,则继续调试程序,直至程序正常运行。 为了便于调试程序,帮助用户迅速查找并改正程序中的错误。VisualLISP提供了监视窗口、检验窗口、符号服务对话框、中断和继续执行程序的模式、命令跟踪、跟踪堆栈、跟踪窗口等调试程序的工具。通过图6-1所示的工具栏或图6-2所示的菜单可以调用有关调试程序的工具。 通过图标 ,清除第7行的末尾的断点。在第8行和第9行的末尾各设置一个断点。加载该程序,在AutoCAD的命令提示下键入TUXING命令。输入p0等变量的值之后,程序返回到文本编辑窗口。光标停留在第8行末尾的断点。在监视窗口看到变量l已有定义,说明第8行没有参数类型错误。单击图标 ,程序停止运行,仍然出现; 错误: 参数类型错误: numberp: nil 的提示。由于光标没有停留在第9行末尾的断点,说明程序在执行第9行时出现了参数类型错误。仔细查看第9行的变量,发现b0的数字0被错写为字母O。 改正第9行的错误之后重新加载、运行程序,输入p0等变量的值之后,光标停留在第8行末尾的断点。单击图标 ,光标停留在第9行末尾的断点,在监视窗口看到变量sit已有定义。再次单击图标 ,程序运行结束,得到图6-10所示的图形。 光标在本此例的断点暂停时,图标从 到 都处于可用状态,说明此时处于可继续的断点循环。 如果在命令提示下,键入TUXING, 在要求用户输入数据时,按下Esc键, 程序停止运行,此时将产生一个不 可继续的断点循环。 图6-10 在此例中,在断点1暂停时,调试按钮从 到 都处于可用状态,因为此时处于可继续的断点循环。 如果运行该程序前,选择菜单Debug?Break On Error,执行到tan函数时,因出现了无定义的函数而程序崩溃,但在该处产生了一个不可继续的断点循环。此时只有调试按钮 和 是可用的。用户只能选择退到上一层断点循环还是退到顶层断点循环。 如果在命令:提示下,键入TUXING命令,在要求用户输入数据时,按下Esc键,程序停止运行,此时也产生了一个不可继续的断点循环。 6.6 跟踪程序运行 跟踪程序运行的工具有命令跟踪、出错跟踪和跟踪堆栈。 1. 命令跟踪 如果打开命令跟踪模式,VisualLISP将在窗口跟踪有关AutoCAD命令的执行情况,以便监控程序是否在执行AutoCAD命令时出现了问题。 例如,选择菜单调试?跟踪命令,在命令:提示下,键入TUXING命令(假定程序能够正常运行),将在图6-11所示跟踪窗口显示有关AutoCAD命令的执行情况的信息。 图6-11显示有关AutoCAD命令的执行情况的跟踪窗口 2. 出错跟踪 出错跟踪是用错误跟踪窗口纪录跟踪程序运行的结果。选择菜单视图→错误跟踪或组合键Ctrl + Shift + R,弹出图6-12所示的错误跟踪窗口。在该窗口单击鼠标右键,将弹出错误跟踪的快捷菜单。 图6-12错误跟踪窗口及其快捷菜单 下面以例6.3为例,介绍利用错误跟踪窗口调试程序的方法。 【例6.3】定义求解一元二次方程的函数 一元二次方程的表达式为:。如果a=0,它不是一个二次方程;如果,方程有实数解,否则无解。方程的求根公式为: 程序内容如下: (defun roots(a b c / t1 t2 x1 x2) ;t1、t2、x1、x2是局部变量 (if (/= a 0) (progn (setq t1 (- (* b b) (* 4 a c))) ; (if (= t1 0.0) (progn (setq t2 (sqrt t1)) ; (setq x1 (/ (+ -b t2) (* 2 a))) ;此处有错 (setq x2 (/ (- -b t2) (* 2 a))) ;此处有错 (print (list x1 x2)) ) (print \n根是复数.) ) ) (print \n
文档评论(0)