调试脚本
Altium Designer 脚本系统提供功能齐全的调试环境。脚本调试器通过提供一系列自动化工具和信息面板,帮助你识别和解决脚本中的错误。
脚本错误
常见错误包括方法无效、分组运算符位置错误、类型不匹配、逻辑错误和排版错误。当脚本系统遇到错误时,调试器会暂停脚本并显示错误对话框,说明问题所在。
下面的示例显示了一个缺少终止字符的脚本以及与之匹配的错误对话框信息。
调试器会在编译或运行时出错时暂停脚本。
一旦错误对话框被取消,就可以修改代码并重新运行脚本。如果需要停止脚本(例如在步进时),请使用停止命令 (
脚本调试
脚本系统中有一系列工具可帮助调试脚本。这些工具包括在脚本中应用多个断点、使用
例如,在检查脚本中变量和表达式的值时,可以使用以下功能:
► 有关调试脚本时使用编辑器工具的信息,请参阅脚本编辑器工具。
跟踪
为帮助查找和解决脚本中的未知错误,可在脚本中插入一系列断点,以便在多个点暂停代码,同时检查变量和表达式的值。
不过,在暂停脚本的任何时刻,也可以使用调试器的跟踪/步进功能,每次推进脚本的一个功能行。通过这种方式,可以使用断点在感兴趣的区域暂停脚本,然后使用跟踪功能一行一行地向前推进。每次执行一行脚本的过程称为跟踪或脚本步进。
脚本调试器提供了与跟踪相关的命令--步入(stepping into)脚本。

调试命令可在
步入命令
进程一次执行一条语句。
如果正在执行的语句调用了另一个存储过程,则步入该语句会将控制权转移到被调用存储过程的第一行。编辑器中的豆绿色高亮显示了脚本正在执行的代码行。使用

跨步命令
该
当确定某个存储过程不是导致问题的原因时,该命令非常有用。
调用堆栈面板
调用堆栈面板用于查看导致当前调试脚本执行点的一系列过程和函数。

调用堆栈面板
在对脚本进行分步调试时,面板会显示所输入的函数或过程的名称。
当调用另一个函数或过程时,面板将显示输入的该附加函数/过程的名称。当从一个函数/过程中调用该函数/过程时,面板中仍会显示原来的函数/过程。
这样就有效地建立了一个 "调用堆栈",显示后代函数/程序调用之间的关系。原始函数/过程显示在堆栈的底部,其上是每个后续调用的函数/过程,直到堆栈顶部的当前输入的函数/过程。
当脚本执行从一个子函数/过程中退出并返回到调用函数/过程时,前一个子函数/过程将从堆栈中移除,而调用函数/过程将成为堆栈的顶层。
双击面板中的条目将跳转到调用所选函数或过程的相应脚本行。该行将以与脚本错误相关的颜色突出显示,并在右侧空白处显示脚本错误标记。这纯粹是为了突出显示。单击文档后,该标记将消失,不会以任何方式阻止调试会话。
异常和信息
与所有编程项目一样,开发和调试脚本代码并不一定要在脚本 "正常运行 "后才停止。在实际使用中,脚本很可能会遇到无法预料的错误,或者无法提供预期的结果。
幸运的是,脚本系统可以通过多种方法来处理执行异常,并为用户提供有关脚本操作的反馈。
异常处理程序
在 DelphiScript 中,关键字 try try-excepttry-finally
Try Finally
在 Try-Finally 处理程序中,语句块中的语句总是被执行。 finally trytry-finally
Reset(F); Try // process file F Finally CloseFile(F); End;
Try Except
使用 Try-Except 语句捕获异常并执行相关的错误处理代码。例如,可以捕获特定异常并更新日志或打开描述性错误对话框。代码异常在 tryexcept
在下面的示例中 ApplyOffsetDefineOffsetYdim Zdim Offset
Procedure ApplyOffset(Ydim, Zdim); Var Offset; Begin; Try Offset := Ydim div Zdim; ShowInfo('Calculated Offset = ' + IntToStr(Offset)); Except ShowWarning('Entered Z dimension must be greater than zero.'); End; End; Procedure DefineOffset; Begin; ApplyOffset(32, 4); End;
对于 ApplyOffset32,4ShowMessage

或者,将传递的参数改为 32,0ApplyOffset(32, 0);OffsetExceptShowWarning

引发
在上述简单的错误处理过程中,假定异常是在除以零的错误中产生的,但这意味着警告对话框文本不会准确报告其他类型的异常。但在本例中,这是最有可能遇到的异常错误。
不过,从用户角度来看,某种形式的特定错误检测还是可取的。在 DelphiScript 中,Delphi On Raise Except
Try Offset := Ydim div Zdim; ShowInfo('Calculated Offset = ' + IntToStr(Offset)); Except Raise; End;
这样,当存储过程的大部分代码都存在于 try Raise

Raise
Procedure ApplyOffset(Ydim, Zdim); Var Offset; Begin; if Zdim > Ydim then Begin; Raise('Z dimension must be smaller than Y dimension.'); End; Offset := Ydim div Zdim; ShowInfo('Calculated Offset = ' + IntToStr(Offset)); End;
在这里,如果上例中的 ZdimYdim

VB 脚本中的错误
Altium Designer 脚本引擎中的 VBScript 实现内置了可用于 VBScript 脚本项目的函数,如 MsgBox
语句 On Error
消息
一般来说,从用户角度来看,消息是增强脚本操作的主要方法。
消息可提供异常警报或指示运行信息和警告,并可插入到处理输入数据、计算、文件操作或任何有利于程序洞察的程序的脚本例程中。
消息对话框
除了脚本系统中的基本消息对话框 (ShowMessage
其中包括以下消息程序
- 显示错误
- 显示异常
- 显示信息
- 显示警告
- 等等。
消息面板
Altium Designer 的
面板
Procedure CreateMessages; var WS : IWorkSpace; MM : IMessagesManager; Begin WS := GetWorkSpace; // obtain Workspace Manager interface MM := WS.DM_MessagesManager; // obtain Message Manager interface MM.ClearMessages; // initialize MM.BeginUpdate; // add relevant messages here using MM.AddMesssage procedures MM.EndUpdate; WS.DM_ShowMessageView; // display messages End;
)
)