




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第6章章 调试程序调试程序 6.1 6.1 概述概述 语法正确的程序并不能保证正常运行,在运行时可能会产生错误的结果语法正确的程序并不能保证正常运行,在运行时可能会产生错误的结果或者发生崩溃现象,这就需要调试。或者发生崩溃现象,这就需要调试。调试程序的步骤是:调试程序的步骤是: 控制程序在指定的位置暂停;控制程序在指定的位置暂停; 查看、分析有关变量的值;查看、分析有关变量的值; 修改程序的源代码;修改程序的源代码; 继续或重新运行程序;继续或重新运行程序; 如果程序不能正常运行,继续调试程序,直至程序正常运行。如果程序不能正常运行,继续调试程序,直至程序正常运行。 为了便于调试程序,为了便
2、于调试程序,Visual LISPVisual LISP提供了一些调试程序的工具,帮助用户提供了一些调试程序的工具,帮助用户迅速查找并改正程序中的错误。迅速查找并改正程序中的错误。 VisualLISPVisualLISP提供了监视窗口、检验窗口、符号服务对话框、中断和继续提供了监视窗口、检验窗口、符号服务对话框、中断和继续执行程序的模式、命令跟踪、跟踪堆栈、跟踪窗口等调试程序的工具。执行程序的模式、命令跟踪、跟踪堆栈、跟踪窗口等调试程序的工具。 通过图通过图6-16-1示示ViewView下拉菜单和下拉菜单和ViewView工具栏可以调用监视窗口、检验窗口等工具栏可以调用监视窗口、检验窗口等
3、调试工具。调试工具。检验窗口检验窗口跟踪堆栈跟踪堆栈出错跟踪出错跟踪符号服务符号服务监视窗口监视窗口自动匹配窗口自动匹配窗口断点窗口断点窗口编译输出窗口编译输出窗口VisualLISPVisualLISP控制台控制台浏览图形数据库浏览图形数据库选择工具栏选择工具栏图图6-1 View6-1 View下拉菜单下拉菜单打开监视窗口打开监视窗口匹配匹配符号服务符号服务堆栈跟踪功能堆栈跟踪功能打开检测窗口打开检测窗口激活控制台窗口激活控制台窗口确定活动窗口确定活动窗口切换到切换到AutoCAD图形窗口图形窗口 通过图通过图6-26-2所示所示DebugDebug下拉菜单和下拉菜单和DebugDebug
4、工具栏的选项可以设置程序暂停工具栏的选项可以设置程序暂停的模式和继续程序运行的方式。的模式和继续程序运行的方式。只执行一步表达式求值。只执行一步表达式求值。执行到下一个断点,如无断点,则执行一个完整的表达式求值。执行到下一个断点,如无断点,则执行一个完整的表达式求值。执行到下一个断点,如无断点,则执行一个最外层的表达式求值。执行到下一个断点,如无断点,则执行一个最外层的表达式求值。继续执行程序继续执行程序结束当前程序。返回到控制台的上一层中断顶层读算写循环。结束当前程序。返回到控制台的上一层中断顶层读算写循环。结束所有当前活动的断点循环并返回到控制台的顶层读算写循环。结束所有当前活动的断点循环
5、并返回到控制台的顶层读算写循环。添加监视添加监视回到最近一次监视窗口的环境回到最近一次监视窗口的环境设置设置/ /删除断点删除断点清除所有的断点清除所有的断点回到源程序上的最近一次的断点回到源程序上的最近一次的断点跟踪命令跟踪命令立即暂停立即暂停出错断开出错断开自动运行自动运行终止求值终止求值图图6-2 Debug6-2 Debug下拉菜单下拉菜单调试指示器按钮显示上一个断点添加监视设置或取消断点切换重置为顶层退出当前层继续执行跳出表达式下一个表达式下一层嵌套表达式Debug工具栏工具栏 6.2 6.2 监视窗口监视窗口 监视窗口用于监视变量、函数在程序运行过程中的结果。选择菜单监视窗口用于监
6、视变量、函数在程序运行过程中的结果。选择菜单D DebugebugW Watch Last Evaluationatch Last Evaluation。将弹出图。将弹出图6-36-3所示的所示的监视监视窗口。窗口。 图图6-3 6-3 监视窗口监视窗口 1. 1. 监视窗口的工具栏监视窗口的工具栏 监视窗口的工具栏有四个图像按钮,从左至右依次是:监视窗口的工具栏有四个图像按钮,从左至右依次是:添加监视:将新的变量加入到监视窗口。添加监视:将新的变量加入到监视窗口。 清除变量:清除监视窗口内的所有的变量。清除变量:清除监视窗口内的所有的变量。排序:将监视窗口内的变量名按字母顺序排序。排序:将监
7、视窗口内的变量名按字母顺序排序。复制到跟踪复制到跟踪/ /日志:将监视窗口的内容复制到跟踪窗口。日志:将监视窗口的内容复制到跟踪窗口。如果打开了日志选项,监视窗口中的这些内容也将被复制到跟踪日志文件。如果打开了日志选项,监视窗口中的这些内容也将被复制到跟踪日志文件。2. 2. 监视窗口的快捷菜单监视窗口的快捷菜单 选择监视列表中的某一项并单击鼠标右键,可显示图选择监视列表中的某一项并单击鼠标右键,可显示图6-46-4所示监视窗口所示监视窗口的快捷菜单。的快捷菜单。调用检验功能,查看所选值。调用检验功能,查看所选值。将所选变量的值复制到系统变量将所选变量的值复制到系统变量 * *objobj*
8、* 中。中。将所选变量值加上一个单引号前缀将所选变量值加上一个单引号前缀 ,打印到控制台窗口。,打印到控制台窗口。对所选变量调用符号服务对话框。对所选变量调用符号服务对话框。调用自动匹配选项对话框,用所选变量名作自动匹配参数。调用自动匹配选项对话框,用所选变量名作自动匹配参数。从监视窗口中删除所选变量。从监视窗口中删除所选变量。图图6-46-4监视窗口的快捷菜单监视窗口的快捷菜单 3. 3. 将变量加入到监视窗口将变量加入到监视窗口有三种途径可以将新的变量加入到监视窗口。有三种途径可以将新的变量加入到监视窗口。 (1 1) 点取工具栏上的添加监视按钮点取工具栏上的添加监视按钮 ,在随后弹出的图
9、,在随后弹出的图6-56-5所示的所示的添加添加监视监视窗口内填入变量名,然后单击窗口内填入变量名,然后单击OKOK按钮。按钮。 图图6-56-5添加监视窗口添加监视窗口 (2 2)亮显要添加的变量名,然后点取工具栏上的添加监视按钮)亮显要添加的变量名,然后点取工具栏上的添加监视按钮 ,随,随后弹出的图后弹出的图6-66-6所示的已填写了该变量名的添加监视窗口,然后单击所示的已填写了该变量名的添加监视窗口,然后单击OKOK按按钮。钮。(3 3)将光标移至将要添加的变量名,单击鼠标右键,在随后弹出的快捷)将光标移至将要添加的变量名,单击鼠标右键,在随后弹出的快捷菜单上选取菜单上选取Add Wat
10、chAdd Watch菜单项,将弹出已填写了该变量名的添加监视窗口,菜单项,将弹出已填写了该变量名的添加监视窗口,然后单击然后单击OKOK按钮。按钮。 4. 4. 监视变量的值监视变量的值 监视列表的每一行的格式是监视列表的每一行的格式是 变量名变量名= =变量值变量值 ,例如:,例如:A = 1A = 1。如果程序。如果程序尚未运行,变量的值是空的;随着程序的运行,在监视窗口可以看到变量的尚未运行,变量的值是空的;随着程序的运行,在监视窗口可以看到变量的值也在不断变化。值也在不断变化。5. 5. 利用断点和监视窗口调试程序利用断点和监视窗口调试程序 假定在编辑器窗口已键入了图假定在编辑器窗口
11、已键入了图6-66-6所示的源程序。该程序的功能是根据用所示的源程序。该程序的功能是根据用户输入的两个对角点绘制矩形。户输入的两个对角点绘制矩形。 首先检查该程序是否存在语法错误。选择菜单首先检查该程序是否存在语法错误。选择菜单T ToolsoolsText in EditorText in Editor或或单击按钮,在单击按钮,在Build OutputBuild Output(输出)窗口显示(输出)窗口显示; Check done.; Check done.。说明该程序。说明该程序没有语法错误。没有语法错误。 选择菜单选择菜单T ToolsoolsLoad Text in EditorLo
12、ad Text in Editor或单击按钮或单击按钮 ,VisualLISPVisualLISP自自动将控制切换到动将控制切换到AutoCADAutoCAD界面。当出现界面。当出现 输入矩形的一个角点:输入矩形的一个角点: 的提示时,输的提示时,输入入(0,0)(0,0)点,该点是点,该点是p1p1点的坐标;当出现点的坐标;当出现 输入矩形的对角点:输入矩形的对角点: 的提示时,输的提示时,输入入(100,100)(100,100)点,该点是点,该点是p2p2点的坐标。程序运行结束,只得到了矩形的两条边,点的坐标。程序运行结束,只得到了矩形的两条边,显然,这不是预期的运行结果。显然,这不是预
13、期的运行结果。 下面演示如何利用监视窗口调试程序。调试程序的步骤如下:下面演示如何利用监视窗口调试程序。调试程序的步骤如下:(1 1)确定要监视的变量。选择菜单)确定要监视的变量。选择菜单D DebugebugA Add Watchdd Watch或单击工具栏上的添或单击工具栏上的添加监视按钮加监视按钮 ,在随后弹出的添加监视窗口内填入变量名,在随后弹出的添加监视窗口内填入变量名p1p1,然后单击,然后单击OKOK按钮。用同样的操作监视变量按钮。用同样的操作监视变量P2P2、P3P3、P4P4。图图6-66-6监视监视P1P1、P2P2、P3P3、P4P4点的值点的值(2 2)从图)从图6-7
14、6-7所示监视窗口可以看到:所示监视窗口可以看到:P1 = 0.0 0.0 0.0P1 = 0.0 0.0 0.0、p2 = 100.0 0.0p2 = 100.0 0.0、p3 = 100.0 100.0 0.0p3 = 100.0 100.0 0.0、P4 = nil P4 = nil 100.0100.0。说明。说明P4P4点的点的X X坐标是无定义的,而坐标是无定义的,而X X坐标是坐标是(car pl)(car pl)的的返回值,检查返回值,检查(car pl)(car pl),carcar是正确的,亮显是正确的,亮显plpl,单击添加监,单击添加监视按钮视按钮 ,监视窗口内出现,监
15、视窗口内出现PL = nilPL = nil,PLPL本不是该程序的变量,本不是该程序的变量,是是p1p1的误写。的误写。(3 3)修改源程序代码,将)修改源程序代码,将plpl改写为改写为p1p1;重新加载、运行该程;重新加载、运行该程序;直到该程序可以正常运行,调试结束。序;直到该程序可以正常运行,调试结束。6.3 6.3 在不设置断点的情况下分步调试程序在不设置断点的情况下分步调试程序 分步调试就是将一个完整的程序分为若干步,逐步调试。每步可以是分步调试就是将一个完整的程序分为若干步,逐步调试。每步可以是最内层的一个表达式,也可以是一个复杂的表达式,还可以是多个表达式。最内层的一个表达式
16、,也可以是一个复杂的表达式,还可以是多个表达式。可以通过设置断点将程序分为若干段,也可以不用断点而是通过步长将程可以通过设置断点将程序分为若干段,也可以不用断点而是通过步长将程序分为若干步。序分为若干步。 结合下例程序介绍几种调试程序的方法。结合下例程序介绍几种调试程序的方法。【例【例6-16-1】 定义绘制矩形的命令,矩形的一个角点、宽、高和旋转角为交定义绘制矩形的命令,矩形的一个角点、宽、高和旋转角为交互输入的参数。互输入的参数。程序的源代码如下:程序的源代码如下:(defun c:rectr(/ w h alf p1 p2 p3 p4)(defun c:rectr(/ w h alf p
17、1 p2 p3 p4) (setq p1(getpoint (setq p1(getpoint 输入矩形的一个角点:输入矩形的一个角点:) w (getdist p1 w (getdist p1 输入矩形的宽:输入矩形的宽:) h (getdist p1 h (getdist p1 输入矩形的高输入矩形的高: ): ) alf (getangle p1 alf (getangle p1 输入矩形的旋转角输入矩形的旋转角: ): ) ) )Walfhp1p2p3p4 (setq p2(polar p1 alf w) (setq p2(polar p1 alf w) (setq p3(polar
18、p2 (+ alf ( (setq p3(polar p2 (+ alf (* * 0.5 pi) h) 0.5 pi) h) (setq p4(polar p3 (+ alf pi) w) (setq p4(polar p3 (+ alf pi) w) (command pline p1 p2 p3 p4 c) (command pline p1 p2 p3 p4 c) (princ) (princ) )1. 1. 从第一个表达式开始,逐步调试程序从第一个表达式开始,逐步调试程序(1 1)选择菜单)选择菜单F FileileO Open Filepen File或单击按钮或单击按钮 ,将,将
19、 例例6-16-1所示源代码录入所示源代码录入文本编辑窗口。选择菜单文本编辑窗口。选择菜单D DebugebugA Add Watchdd Watch或单击按钮或单击按钮 ,监视变量,监视变量w w、h h、alfalf、p1p1、p2p2、p3p3、p4p4。选择菜单。选择菜单T ToolsoolsLoad Text in Load Text in E Editorditor或单击按或单击按钮钮 ,加载该程序。,加载该程序。(2 2)通过菜单)通过菜单D DebugebugStop OStop On ncece,使之处于打开的状态。,使之处于打开的状态。(3 3)单击按钮)单击按钮 ,切换到
20、,切换到AutoCADAutoCAD窗口,在窗口,在AutoCADAutoCAD的的CommandCommand:提示下,:提示下,键入键入rect3rect3命令。命令。Walfhp1p2p3p4 控制自动切换到控制自动切换到VisualLISPVisualLISP文本编辑窗口,监视窗口内的变文本编辑窗口,监视窗口内的变量值均为量值均为nilnil。此时光标停在。此时光标停在(defun(defun之前,整个程序被加亮显示。之前,整个程序被加亮显示。选取下拉菜单选取下拉菜单D Debugebug的的Step Step I Intonto项、项、F8F8功能键或单击按钮功能键或单击按钮 ,光标
21、停在光标停在(setq p1(setq p1之前,与之匹配的右括号之间被加亮显示。单之前,与之匹配的右括号之间被加亮显示。单击按钮击按钮 ,光标停在,光标停在(getpoint (getpoint 输入矩形的一个角点:输入矩形的一个角点:)之之前,并亮显该表达式。注意,指示按钮内的前,并亮显该表达式。注意,指示按钮内的II在在 ()() 之前。之前。 单击按钮单击按钮 ,程序切换到,程序切换到AutoCADAutoCAD窗口,出现窗口,出现 输入矩形的输入矩形的一个角点:一个角点: 的提示,输入的提示,输入(100,80)(100,80),程序切换到,程序切换到VisualLISPVisual
22、LISP的的文本编辑窗口。光标停在文本编辑窗口。光标停在(getpoint (getpoint 输入矩形的一个角点:输入矩形的一个角点:)之后,仍然亮显该表达式。注意,指示按钮内的之后,仍然亮显该表达式。注意,指示按钮内的 I I 在在 ()() 之后。之后。 单击按钮单击按钮 ,光标停在,光标停在(getdist p1 (getdist p1 输入矩形的宽:输入矩形的宽:)之之前,并亮显该表达式。注意,指示按钮内的前,并亮显该表达式。注意,指示按钮内的II回到回到 ()() 之前。之前。监视窗口内的变量监视窗口内的变量p1=100.0 80.0 0.0p1=100.0 80.0 0.0。重复
23、类似的操作,。重复类似的操作,在在AutoCADAutoCAD窗口输入矩形的宽度为窗口输入矩形的宽度为200200、高度为、高度为150150,旋转角为,旋转角为3030。在操作过程中指示按钮随时显示着光标相对于表达式的位置,监在操作过程中指示按钮随时显示着光标相对于表达式的位置,监视窗口显示着这些变量的当前值(注意,视窗口显示着这些变量的当前值(注意,alfalf的单位为弧度)。的单位为弧度)。也说明单击按钮也说明单击按钮 只执行了一步表达式求值。只执行了一步表达式求值。 当光标停在当光标停在(setq p3(polar p2 (+ alf (setq p3(polar p2 (+ alf
24、(* * 0.5 pi) h) 0.5 pi) h)之前之前时,单击按钮时,单击按钮 ,整个程序被加亮显示,光标停在整个程序的,整个程序被加亮显示,光标停在整个程序的结尾,再单击以上任一按钮,程序运行结束。结尾,再单击以上任一按钮,程序运行结束。 切换到切换到AutoCADAutoCAD窗口,显示着刚才绘制的矩形。窗口,显示着刚才绘制的矩形。 假定程序的第假定程序的第5 5行误写为行误写为 (getangl p1 (getangl p1 输入矩形的旋转角输入矩形的旋转角: : ),仍旧用上述的方法调试该程序,当执行到,仍旧用上述的方法调试该程序,当执行到 输入矩形的旋转输入矩形的旋转角角: :
25、 时,将出现提示时,将出现提示 ; error: no function definition: ; error: no function definition: GETANGLGETANGL(没有(没有GETANGLGETANGL这个函数定义)这个函数定义) 。点取查找按钮。点取查找按钮 ,在随后弹出的在随后弹出的 FIND FIND 对话框的对话框的FiFin ndWhatdWhat编辑框输入查找内容为编辑框输入查找内容为 GETANGLGETANGL ,单击,单击 F Findind按钮,找到按钮,找到getanglgetangl并改正为并改正为getanglegetangle。 重新调
26、试程序,直至程序正常运行。重新调试程序,直至程序正常运行。2. 2. 自动分步调试程序自动分步调试程序(1 1)自动分步调试程序的步骤)自动分步调试程序的步骤 将例将例6-16-1源代码的文件装入文本编辑窗口。监视变量源代码的文件装入文本编辑窗口。监视变量w w、h h、alfalf、p1p1、p2p2、p3p3、p4p4。加载该程序。选择菜单。加载该程序。选择菜单D DebugebugAnimatAnimate e。 在在AutoCADAutoCAD的的CommandCommand: 提示下,键入提示下,键入rect3rect3命令。命令。Visua Visua lLISPlLISP自动切换
27、到文本编辑窗口。随着光标的位置、指示按钮自动切换到文本编辑窗口。随着光标的位置、指示按钮 内内II和和 ()() 的变化,自动地执行每一个表达式的求值,监视的变化,自动地执行每一个表达式的求值,监视窗口内的变量值也相应地改变。如果遇到了错误的函数调用,窗口内的变量值也相应地改变。如果遇到了错误的函数调用,程序停止运行,并报告程序停止运行,并报告 ; error: no function definition: ; error: no function definition: 信息。找到并改正错误的函数。继续调试程序,直至程序正信息。找到并改正错误的函数。继续调试程序,直至程序正常运行。常运行。
28、(2 2)设置每步延迟的时间)设置每步延迟的时间 选择菜单选择菜单T ToolsoolsEnvironmant Environmant O OptionsptionsG General eneral O Options ptions 弹出图弹出图6-76-7所示所示General General O Optionsptions对话框。单对话框。单击该对话框的击该对话框的DiagnosticDiagnostic(诊断)卡,在(诊断)卡,在A Animation nimation delaydelay编辑框输入每步延迟的时间(以毫秒为单位),编辑框输入每步延迟的时间(以毫秒为单位),单击确定按钮即
29、可。单击确定按钮即可。图图6-76-7诊断选项卡诊断选项卡 6.4 6.4 断点循环断点循环 表达式是表达式是AutoLISPAutoLISP程序的基本单元,程序的基本单元,LISPLISP的工作实际上是不的工作实际上是不断地对表达式进行读入、求值和输出操作,在断地对表达式进行读入、求值和输出操作,在LISPLISP术语中,被称术语中,被称为读算写循环。为读算写循环。 如果不用调试工具而是正常地运行如果不用调试工具而是正常地运行AutoLISPAutoLISP程序时,程序将程序时,程序将处于顶层的读算写循环。如果在处于顶层的读算写循环。如果在VisualLISPVisualLISP控制台窗口内
30、对表达控制台窗口内对表达式求值时,也是处于顶层的读算写循环。式求值时,也是处于顶层的读算写循环。 如果程序在运行时被中断或挂起,如果程序在运行时被中断或挂起,VisualLISPVisualLISP将控制转交给将控制转交给控制台,就进入了断点循环(控制台,就进入了断点循环(Break loopBreak loop)。断点循环是一个单)。断点循环是一个单独的读算写循环,它嵌套在原有的读算写循环内。断点循环也可独的读算写循环,它嵌套在原有的读算写循环内。断点循环也可以被中断,这时将开始一个嵌套于该断点循环内的读算写循环。以被中断,这时将开始一个嵌套于该断点循环内的读算写循环。断点循环相对于顶层循环
31、嵌套的层数称为该中断的层数。断点循环相对于顶层循环嵌套的层数称为该中断的层数。 进入断点循环时,进入断点循环时,VisualLISPVisualLISP将在控制台提示将在控制台提示_$_$前前加一个数字来指出所处循环的层数。例如,当首次进入加一个数字来指出所处循环的层数。例如,当首次进入程序的断点循环时,提示为程序的断点循环时,提示为_1_$_1_$。如果处于断点循环状。如果处于断点循环状态,就不能将控制切换到态,就不能将控制切换到AutoCADAutoCAD窗口。窗口。 从断点循环退出,将恢复上一层循环。如果在该断从断点循环退出,将恢复上一层循环。如果在该断点循环中修改了某变量的值,程序继续
32、运行时将使用变点循环中修改了某变量的值,程序继续运行时将使用变量修改后的值。量修改后的值。断点循环分为断点循环分为可继续断点循环可继续断点循环和和不可继续断点循环不可继续断点循环。1. 1. 可继续的断点循环可继续的断点循环 可继续的断点循环是指可以在程序中断处,继续向下执行剩可继续的断点循环是指可以在程序中断处,继续向下执行剩余的表达式。用以下方法进入可继续断点循环:余的表达式。用以下方法进入可继续断点循环:(1 1)打开)打开Stop OnceStop Once模式,碰到带调试信息的表达式时。模式,碰到带调试信息的表达式时。(2 2)遇到带)遇到带Debug on EntryDebug o
33、n Entry(进入时调试)标志的函数时。(进入时调试)标志的函数时。(3 3)遇到程序中设置的断点时。)遇到程序中设置的断点时。(4 4)单击暂停按钮进入断点循环时。)单击暂停按钮进入断点循环时。(5 5)在前一个断点循环状态下,执行)在前一个断点循环状态下,执行Step IntoStep Into、Step OverStep Over或或Step OutStep Out时。时。 如果程序在某函数中被中断,可以访问被该函数声明的局部如果程序在某函数中被中断,可以访问被该函数声明的局部变量,甚至可以在控制台提示下用变量,甚至可以在控制台提示下用setqsetq函数修改它们的值。函数修改它们的值
34、。2. 2. 不可继续的断点循环不可继续的断点循环 当程序出现错误导致崩溃时,如果设置了当程序出现错误导致崩溃时,如果设置了Break On ErrorBreak On Error选选项,将激活一个不可继续的断点循环。此时可以访问出错环境项,将激活一个不可继续的断点循环。此时可以访问出错环境中的所有变量,但不能继续执行程序或执行任何单步调试程序中的所有变量,但不能继续执行程序或执行任何单步调试程序的命令。的命令。 如果工具栏上的单步调试的按钮如果工具栏上的单步调试的按钮 、 、 或继续运行或继续运行的按钮的按钮 处于可用状态,说明此时进入了可继续的断点循环。处于可用状态,说明此时进入了可继续的
35、断点循环。 处于不可继续的断点循环时,选取处于不可继续的断点循环时,选取D Debugebug菜单的菜单的R Reset to eset to Top LevelTop Level项或单击按钮项或单击按钮 ,退出断点循环并跳转至控制台顶,退出断点循环并跳转至控制台顶层循环;选取层循环;选取D Debugebug菜单的菜单的Q Quit Currentuit Current项或单击按钮项或单击按钮 ,退,退出断点循环并返回到上一层循环。出断点循环并返回到上一层循环。6.5 6.5 利用断点调试程序利用断点调试程序 运行的程序遇到断点时,将产生一个中断。当程序中断时运行的程序遇到断点时,将产生一个
36、中断。当程序中断时, ,可可查看、分析变量的值,修改程序的源代码。利用断点可提高调试查看、分析变量的值,修改程序的源代码。利用断点可提高调试程序的效率。程序的效率。1. 1. 有关断点的操作有关断点的操作(1 1)在程序中设置)在程序中设置/ /删除断点删除断点 只能在只能在VisualLISPVisualLISP的文本编辑器窗口内设置断点。断点应位的文本编辑器窗口内设置断点。断点应位于表达式的左、右括号上。设置断点的步骤如下:于表达式的左、右括号上。设置断点的步骤如下: 将光标移到需要程序暂停的位置。例如,需要在某表达式将光标移到需要程序暂停的位置。例如,需要在某表达式 之前暂停,则应将光标
37、移至与表达式的左括号相邻的位置。之前暂停,则应将光标移至与表达式的左括号相邻的位置。整理ppt26 选择菜单选择菜单D DebugebugT Toggle Breakpointoggle Breakpoint、单击按钮、单击按钮 或按或按F9F9键。如果该位置没有断点,就加入一个断点,否则,删除该断键。如果该位置没有断点,就加入一个断点,否则,删除该断点。单击鼠标右键在快捷菜单中选择点。单击鼠标右键在快捷菜单中选择Toggle BreakpointToggle Breakpoint项也项也可以设置或删除断点。如果光标不与括号相邻,可以设置或删除断点。如果光标不与括号相邻,Visual LISP
38、Visual LISP暂时将光标移到后面最近的右括号处,并通过对话框询问用户暂时将光标移到后面最近的右括号处,并通过对话框询问用户是否在该处设置断点。是否在该处设置断点。 选择菜单选择菜单D DebugClear All ebugClear All B Breakpointsreakpoints项,删除已设置项,删除已设置的所有断点。的所有断点。(2 2)改变断点的颜色)改变断点的颜色 VisualLISPVisualLISP用高亮矩形显示每一个断点,默认情况下,活动的断点是红色用高亮矩形显示每一个断点,默认情况下,活动的断点是红色的。选择菜单的。选择菜单T ToolsoolsW Window
39、 Attributesindow AttributesC Configure Current onfigure Current ,通过随后,通过随后弹出的弹出的Window AttributesWindow Attributes对话框内的对话框内的WINDOW-TEXTWINDOW-TEXT下拉列表的下拉列表的:BPT-ACTIVE:BPT-ACTIVE项项可改变断点的颜色。可改变断点的颜色。(3 3)临时禁用断点)临时禁用断点 断点可以被临时禁用和恢复使用。禁用断点的步骤如下:断点可以被临时禁用和恢复使用。禁用断点的步骤如下: 将光标置于断点处并单击鼠标右键。将光标置于断点处并单击鼠标右键。
40、 从显示的快捷菜单上选择从显示的快捷菜单上选择Breakpoints serviceBreakpoints service项,将弹出图项,将弹出图6-86-8所示断所示断点服务对话框。点服务对话框。图图6-86-8断点服务对话框断点服务对话框 在断点服务对话框中单击在断点服务对话框中单击D Disableisable按钮可临时禁用该断点;若该断点已被禁按钮可临时禁用该断点;若该断点已被禁用,图用,图6-96-9所示断点服务对话框将出现所示断点服务对话框将出现E Enablenable按钮,单击该按钮,所选断点将按钮,单击该按钮,所选断点将改变为可用状态。改变为可用状态。 默认情况下,被禁用的断
41、点显示为蓝色。用设置断点颜色的方法也可以改默认情况下,被禁用的断点显示为蓝色。用设置断点颜色的方法也可以改变被禁用断点的颜色。变被禁用断点的颜色。(4 4)浏览和编辑程序中的断点)浏览和编辑程序中的断点 选择菜单选择菜单V ViewBreaiewBreak kpoints Windowpoints Window将看到图将看到图6-96-9所示的断点对话框。所示的断点对话框。图图6-96-9断点对话框断点对话框 该断点窗口列出了所有编辑器窗口的断点。其中有程序该断点窗口列出了所有编辑器窗口的断点。其中有程序6-1.lsp6-1.lsp的的3 3个断个断点、点、 6-2.lsp6-2.lsp的的2
42、 2个断点。每项包含断点的源文件名以及断点在源文件中的个断点。每项包含断点的源文件名以及断点在源文件中的位置,位置是以位置,位置是以0 0开始的西文字符数量,前面的开始的西文字符数量,前面的+号表示该断点是活动的,号表示该断点是活动的,- - 号表示该断点是被禁用的。号表示该断点是被禁用的。 单击该对话框的单击该对话框的Delete allDelete all按钮可以删除所有的断点;亮显一项,单击按钮可以删除所有的断点;亮显一项,单击S Showhow按钮可显示该断点所在的源文件及其在源文件中的位置;单击按钮可显示该断点所在的源文件及其在源文件中的位置;单击DeleteDelete按按钮可删除
43、该断点;单击钮可删除该断点;单击E Editdit按钮可打开图按钮可打开图6-96-9所示的断点服务对话框,利用所示的断点服务对话框,利用该对话框可以改变断点可用或禁用的状态。该对话框可以改变断点可用或禁用的状态。(5 5) 断点的生命周期断点的生命周期 可以在加载程序之前或之后设置断点。如果在加载程序之后设置断点,可以在加载程序之前或之后设置断点。如果在加载程序之后设置断点,该断点只有在重新加载程序之后才有效。该断点只有在重新加载程序之后才有效。2. 2. 在断点处继续运行程序在断点处继续运行程序 运行的程序遇到断点时,将产生一个中断,即断点循环。单运行的程序遇到断点时,将产生一个中断,即断
44、点循环。单击分布调试按钮击分布调试按钮 、 和和 可继续运行程序。如果在复杂的可继续运行程序。如果在复杂的表达式之内还有一些断点,单击按钮表达式之内还有一些断点,单击按钮 和和 ,首先在断点处暂,首先在断点处暂停。此外还有以下控制程序继续运行的工具栏按钮、快捷键或停。此外还有以下控制程序继续运行的工具栏按钮、快捷键或D Debugebug菜单的菜单项。菜单的菜单项。 ContinueContinue或或CtrlCtrl+ +F8F8:继续执行程序直至遇到下一个断点:继续执行程序直至遇到下一个断点(如果有)或程序结束。(如果有)或程序结束。 Quit CurrentQuit Current或或C
45、trlCtrl+ +Q Q:结束当前程序,返回到控制台的:结束当前程序,返回到控制台的上一层断点循环。上一层断点循环。 Reset to Top LevelReset to Top Level或或CtrlCtrl+ +R R:结束当前程序,结束所有:结束当前程序,结束所有的断点循环。的断点循环。3. 3. 利用断点调试程序实例利用断点调试程序实例【例【例6-26-2】 定义绘制图定义绘制图6-106-10所示图形的命令,所示图形的命令,p0p0、d d、b b、t1t1、alfalf是交互输是交互输入的参数。入的参数。图图6-106-10轴的键槽部位截面轴的键槽部位截面 程序源代码如下:程序源
46、代码如下:(defun c:tuxing (/ p0 alf d b t1 r l b1 sit p1 p2 p3 p4 p5)(defun c:tuxing (/ p0 alf d b t1 r l b1 sit p1 p2 p3 p4 p5)(setq p0 (getpoint nEnter P0: )(setq p0 (getpoint nEnter P0: )(setq d (getdist p0 nEnter d: )(setq d (getdist p0 nEnter d: ) (setq b (getdist p0 nEnter b: ) (setq b (getdist p0
47、nEnter b: ) (setq tl (getdist p0 nEnter t1: ) (setq tl (getdist p0 nEnter t1: ) ;tl;tl应改为应改为t1t1 (setq alf (getangle p0 nEnter alf: ) (setq alf (getangle p0 nEnter alf: ) ;断点;断点1 1的位置的位置 (setq r (setq r (* * 0.5 d) bl ( 0.5 d) bl (* * 0.5 b) 0.5 b) (setq l (sqrt (- ( (setq l (sqrt (- (* * r r) ( r r
48、) (* * b1 b1) b1 b1) (setq sit (tan b1 l) (setq sit (tan b1 l) ;tan;tan应改为应改为atanatan (setq p1 (polar p0 (+ alf sit) r) (setq p1 (polar p0 (+ alf sit) r) (setq p2 (polar p0 (+ pi alf) r) (setq p2 (polar p0 (+ pi alf) r) (setq p3 (polar p0 (- alf sit) r) (setq p3 (polar p0 (- alf sit) r) (setq p4 (po
49、lar p3 (+ pi alf) (- (+ r l) t1) (setq p4 (polar p3 (+ pi alf) (- (+ r l) t1) (setq p5 (polar p1 (+ alf pi) (- (+ r l) t1) (setq p5 (polar p1 (+ alf pi) (- (+ r l) t1) (command pline p1 a s p2 p3 l p4 p5 c) (command pline p1 a s p2 p3 l p4 p5 c) ) 选择菜单选择菜单F FileileO Open Filepen File将例将例6-26-2所示源代码的
50、文件装入文所示源代码的文件装入文本编辑窗口。选择菜单本编辑窗口。选择菜单D DebugebugA Add Watchdd Watch或单击按钮或单击按钮 ,监视,监视变量变量p0p0、d d、b b、t1t1、alfalf、r r、l l、b1b1、sitsit、p1p1、p2p2、p3p3、p4p4、p5p5。 加载该程序,单击按钮加载该程序,单击按钮 ,在,在AutoCADAutoCAD的的Command:Command:提示下键入提示下键入TUXINGTUXING命令,程序停止运行,出现提示命令,程序停止运行,出现提示;error: bad argument ;error: bad ar
51、gument type: numberp: niltype: numberp: nil(错误的参数类型,出现了无定义的参数)(错误的参数类型,出现了无定义的参数) 。 将光标移至程序的第将光标移至程序的第6 6行末尾,选择菜单行末尾,选择菜单D DebugebugT Toggle oggle BreakpointBreakpoint、按功能键、按功能键F9F9或单击按钮或单击按钮 ,在该处设置一个断点。,在该处设置一个断点。整理ppt34 单击按钮单击按钮 ,加载当前文本编辑窗口内的源程序。单击,加载当前文本编辑窗口内的源程序。单击按钮按钮 ,在,在Command:Command:提示下键入提
52、示下键入TUXINGTUXING命令,依次输入命令,依次输入p0p0、d d、b b、t1t1、alfalf的值之后,回到文本编辑窗口。光标停留在断的值之后,回到文本编辑窗口。光标停留在断点点1 1的位置,说明已执行了的位置,说明已执行了5 5个个getget表达式。表达式。 浏览监视窗口,浏览监视窗口,p0p0、d d、b b、alfalf已有具体的数值,而已有具体的数值,而T1=nilT1=nil,说明表达式(,说明表达式(setq tl (getdist p0 nEnter t1: setq tl (getdist p0 nEnter t1: ))有错误,仔细检查,发现误将)有错误,仔细
53、检查,发现误将t1t1写为写为tltl。改正之后,单击。改正之后,单击按钮按钮 ,单击按钮,单击按钮 ,在,在Command:Command:提示下键入提示下键入TUXINGTUXING命令,命令,依次输入依次输入p0p0等的数据,当程序停留在断点等的数据,当程序停留在断点1 1的位置时,浏览监的位置时,浏览监视窗口视窗口t1t1已有定义了。已有定义了。 单击继续按钮单击继续按钮 ,程序停止运行,出现提示,程序停止运行,出现提示; error: no ; error: no function definition: TANfunction definition: TAN(错误,没有定义函数:(
54、错误,没有定义函数:TANTAN) ,正,正确的函数应该是兰色的,找到黑色的函数名确的函数应该是兰色的,找到黑色的函数名tantan,改正为,改正为atanatan。 将光标移至断点将光标移至断点1 1处单击按钮处单击按钮 ,删除断点,删除断点1 1。单击按钮。单击按钮 ,在,在Command:Command:提示下键入提示下键入TUXINGTUXING命令,依次命令,依次输入输入p0p0等的数据,程序正常结束,并得到等的数据,程序正常结束,并得到图图6-106-10所示图形。所示图形。图图6-106-10 在此例中,在断点在此例中,在断点1 1暂停时,调试按钮从暂停时,调试按钮从 到到 都处
55、于可都处于可用状态,因为此时处于可继续的断点循环。用状态,因为此时处于可继续的断点循环。 如果运行该程序前,选择菜单如果运行该程序前,选择菜单D DebugebugBreaBreak k On Error On Error,执行,执行到到tantan函数时,因出现了无定义的函数而程序崩溃,但在该处函数时,因出现了无定义的函数而程序崩溃,但在该处产生了一个不可继续的断点循环。此时只有调试按钮产生了一个不可继续的断点循环。此时只有调试按钮 和和是可用的。用户只能选择退到上一层断点循环还是退到顶层断是可用的。用户只能选择退到上一层断点循环还是退到顶层断点循环。点循环。 如果在如果在CommandCo
56、mmand:提示下,键入:提示下,键入TUXINGTUXING命令,在要求用户输入命令,在要求用户输入数据时,按下数据时,按下EscEsc键,程序停止运行,此时也产生了一个不可键,程序停止运行,此时也产生了一个不可继续的断点循环。继续的断点循环。6.6 6.6 跟踪程序运行跟踪程序运行 跟踪程序运行的工具有命令跟踪、出错跟踪和跟踪堆栈。跟踪程序运行的工具有命令跟踪、出错跟踪和跟踪堆栈。1. 1. 命令跟踪命令跟踪 如果打开命令跟踪模式,如果打开命令跟踪模式,VisualLISPVisualLISP将在窗口跟踪有关将在窗口跟踪有关AutoCADAutoCAD命令的执命令的执行情况,以便监控程序是
57、否在执行行情况,以便监控程序是否在执行AutoCADAutoCAD命令时出现了问题。命令时出现了问题。 例如,选择菜单例如,选择菜单D DebugebugTrace CoTrace Com mmandmand,在,在CommandCommand:提示下,键入:提示下,键入TUXINGTUXING命令(假定程序能够正常运行),将在图命令(假定程序能够正常运行),将在图6-116-11所示所示 TraceTrace 窗口显示窗口显示有关有关AutoCADAutoCAD命令的执行情况的信息。命令的执行情况的信息。图图6-116-11显示有关显示有关AutoCADAutoCAD命令的执行情况的跟踪窗口
58、命令的执行情况的跟踪窗口 2. 2. 出错跟踪出错跟踪 出错跟踪是用出错跟踪是用Error TraceError Trace窗口录跟踪程序运行的结果。在跟踪窗口按窗口录跟踪程序运行的结果。在跟踪窗口按鼠标右键,将弹出跟踪窗口的快捷菜单,见图鼠标右键,将弹出跟踪窗口的快捷菜单,见图6-136-13。下面以例下面以例6-36-3为例,介绍利用为例,介绍利用Error TraceError Trace窗口调试程序的方法。窗口调试程序的方法。【例【例6-36-3】定义求解一元二次方程的函数】定义求解一元二次方程的函数一元二次方程的表达式为:一元二次方程的表达式为: 如果如果 a=0a=0,它不是一个二
59、次方程;如果,方程有实数解,否则无解。,它不是一个二次方程;如果,方程有实数解,否则无解。方程的求根公式为:方程的求根公式为:aacbbx242程序内容如下:程序内容如下: (defun roots(a b c / t1 t2 x1 x2) (defun roots(a b c / t1 t2 x1 x2) ;t1t1、t2t2、x1x1、x2x2是局部变量是局部变量 (if (/= a 0)(if (/= a 0) (progn (progn (setq t1 (- ( (setq t1 (- (* * b b) ( b b) (* * 4 a c) 4 a c) ; (if (= t1 0
60、.0)(if (= t1 0.0) (progn (progn (setq t2 (sqrt t1) (setq t2 (sqrt t1) ; (setq x1 (/ (+ -b t2) (setq x1 (/ (+ -b t2) (* * 2 a) 2 a) ;此处有错;此处有错 (setq x2 (/ (- -b t2) (setq x2 (/ (- -b t2) (* * 2 a) 2 a) ;此处有错;此处有错 (print (list x1 x2)(print (list x1 x2) ) ) (print n (print n根是复数根是复数.).) ) ) ) ) (print
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川省成都市高中化学 专题 硫及其氧化物的性质教学实录 新人教版必修1
- 湘少版三年级英语上册教学工作计划(及进度表)
- Unit 2 Different families(教学设计)-2024-2025学年人教版(2024)英语三年级上册
- 广东省韶关市八年级政治上册 第一单元 塑造自我 1.2 明辨是非(铸就良知的标尺)教学实录 粤教版
- 浙教版信息技术七上第10课《数据可视化》教学设计
- oec管理方法内容
- ns方程推导过程
- 全国江西科学技术版小学信息技术三年级下册第三单元第12课《网上购物》教学设计
- 山东省淄博市七年级生物下册 4.5.2 人粪尿的处理教学实录 新人教版
- 2025年地震数字遥测接收机项目建议书
- 食品的营养课件
- 化学品安全技术说明书 MSDS( 石脑油)
- 电位计算精品课件
- DB13T 5542-2022 水利水电工程施工组织设计编制指南
- 中子源介绍课件
- 二期6KV系统1
- 研究生面试复试英语+常问问题
- 安徽省教育科学研究项目课题申请书【模板】
- 参考文献的标注规范
- 幼年特发性关节炎.
- 武松打虎剧本
评论
0/150
提交评论