调试脚本

Altium Designer 脚本系统提供功能齐全的调试环境。脚本调试器通过提供一系列自动化工具和信息面板,帮助你识别和解决脚本中的错误。

脚本错误

常见错误包括方法无效、分组运算符位置错误、类型不匹配、逻辑错误和排版错误。当脚本系统遇到错误时,调试器会暂停脚本并显示错误对话框,说明问题所在。

下面的示例显示了一个缺少终止字符的脚本以及与之匹配的错误对话框信息。

 调试器会在编译或运行时出错时暂停脚本。

一旦错误对话框被取消,就可以修改代码并重新运行脚本。如果需要停止脚本(例如在步进时),请使用停止命令 (Run » Stop, Ctrl+F3) 或按钮 ( Script Debug工具栏)。

在某些情况下,错误会导致脚本锁定在一个无限循环中,脚本变得毫无反应。要解决这个问题,可按 Ctrl+Pause/Break快捷键来打破脚本的循环。

脚本调试

脚本系统中有一系列工具可帮助调试脚本。这些工具包括在脚本中应用多个断点、使用 Watch List面板来监控变量的值,使用书签来更有效地跳转,以及使用 step into 和 over 功能来跟踪脚本。

例如,在检查脚本中变量和表达式的值时,可以使用以下功能:

► 有关调试脚本时使用编辑器工具的信息,请参阅脚本编辑器工具。

如果正在调试作用于打开文档的脚本,例如使用 IPCB_Board接口从 PCB 文档获取数据时,脚本编辑器将无法检测到该文档为活动文档。在这种情况下,请保存所做的任何更改,然后从活动文档本身运行脚本 (File » Run Script).

跟踪

为帮助查找和解决脚本中的未知错误,可在脚本中插入一系列断点,以便在多个点暂停代码,同时检查变量和表达式的值。

不过,在暂停脚本的任何时刻,也可以使用调试器的跟踪/步进功能,每次推进脚本的一个功能行。通过这种方式,可以使用断点在感兴趣的区域暂停脚本,然后使用跟踪功能一行一行地向前推进。每次执行一行脚本的过程称为跟踪或脚本步进。

脚本调试器提供了与跟踪相关的命令--步入(stepping into)脚本。Run»Step Into) 和跨步 (Run»Step Over).这样就可以在调试脚本代码时跟踪脚本进程并分析其行为。

调试命令可在 Run 菜单中的调试命令。
调试命令可在 Run 菜单中的调试命令。

步入命令

进程一次执行一条语句。 Step Into进程一次执行一条脚本语句。该命令可从 Run 菜单、相关的 Script Debug工具栏按钮 ()F7 快捷键。

如果正在执行的语句调用了另一个存储过程,则步入该语句会将控制权转移到被调用存储过程的第一行。编辑器中的豆绿色高亮显示了脚本正在执行的代码行。使用 Run » Stop命令、 Ctrl+F3快捷键或工具栏按钮 () 取消脚本步进过程。

跨步命令

Step Over过程类似于 Step Into,但如果当前语句是对另一个存储过程的调用,则将不间断地执行整个被调用存储过程,而不是跟踪被调用存储过程。该命令可从 Run 菜单、相关按钮 ()F8 快捷键。

当确定某个存储过程不是导致问题的原因时,该命令非常有用。 called 该命令可以避免不必要地逐行跟踪被调用存储过程 - 该存储过程被 "跨过"。

使用 Run » Run To Cursor命令(快捷键: Ctrl+F9) 执行脚本到光标位置。脚本会在该行暂停,就像遇到了一个断点,可以从该点开始运行或步进。

调用堆栈面板

调用堆栈面板用于查看导致当前调试脚本执行点的一系列过程和函数。

调用堆栈面板
调用堆栈面板

在对脚本进行分步调试时,面板会显示所输入的函数或过程的名称。

当调用另一个函数或过程时,面板将显示输入的该附加函数/过程的名称。当从一个函数/过程中调用该函数/过程时,面板中仍会显示原来的函数/过程。

这样就有效地建立了一个 "调用堆栈",显示后代函数/程序调用之间的关系。原始函数/过程显示在堆栈的底部,其上是每个后续调用的函数/过程,直到堆栈顶部的当前输入的函数/过程。

当脚本执行从一个子函数/过程中退出并返回到调用函数/过程时,前一个子函数/过程将从堆栈中移除,而调用函数/过程将成为堆栈的顶层。

双击面板中的条目将跳转到调用所选函数或过程的相应脚本行。该行将以与脚本错误相关的颜色突出显示,并在右侧空白处显示脚本错误标记。这纯粹是为了突出显示。单击文档后,该标记将消失,不会以任何方式阻止调试会话。

异常和信息

与所有编程项目一样,开发和调试脚本代码并不一定要在脚本 "正常运行 "后才停止。在实际使用中,脚本很可能会遇到无法预料的错误,或者无法提供预期的结果。

幸运的是,脚本系统可以通过多种方法来处理执行异常,并为用户提供有关脚本操作的反馈。

异常处理程序

在 DelphiScript 中,关键字 try 关键字引入一个 try-except语句或 try-finally语句。这两种语句相互关联,但目的不同。

Try Finally

在 Try-Finally 处理程序中,语句块中的语句总是被执行。 finally 代码块中的语句始终会被执行,无论该代码块中是否出现异常错误。 try块中是否发生异常错误。使用 try-finally块来释放临时对象或其他资源,并执行清理活动。

Reset(F);
Try
  // process file F
Finally
  CloseFile(F);
End;

Try Except

使用 Try-Except 语句捕获异常并执行相关的错误处理代码。例如,可以捕获特定异常并更新日志或打开描述性错误对话框。代码异常在 try代码块中的异常会导致 except代码块被执行。

在下面的示例中 ApplyOffset存储过程中调用了 DefineOffset存储过程。存储过程进行一个简单的除法计算(对 Ydim 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;

对于 ApplyOffset参数(32,4) 的参数,执行的脚本将显示使用 ShowMessage存储过程显示计算结果,如下所示。

或者,将传递的参数改为 32,0(ApplyOffset(32, 0);) 会在 Offset计算中出现除以零的异常,从而触发 Except处理程序块。这将使用 ShowWarning过程来显示相关的 Warning 对话框。

在脚本编辑器的调试模式下,当对话框被取消时,异常将暂停脚本的执行。 Error 在脚本编辑器的调试模式下,当对话框被取消时,异常将暂停脚本的执行。使用 Run Step Into命令继续执行。

引发

在上述简单的错误处理过程中,假定异常是在除以零的错误中产生的,但这意味着警告对话框文本不会准确报告其他类型的异常。但在本例中,这是最有可能遇到的异常错误。

不过,从用户角度来看,某种形式的特定错误检测还是可取的。在 DelphiScript 中,Delphi On 关键字(捕捉指定的异常类型)是不支持的,但在 Raise 语句可以在 Except 块内的语句来引发最近的异常(无论其类型如何)。

Try
   Offset := Ydim div Zdim;
   ShowInfo('Calculated Offset = ' + IntToStr(Offset));
Except
   Raise;
End;

这样,当存储过程的大部分代码都存在于 try 语句块中时,所有异常都可以通过 Raise 语句报告所有异常。请注意,异常对话框只会报告一般的错误信息,而不会报告脚本的特定信息。

可以不带参数使用 Raise 可以在不带参数的情况下使用,以重新引发最后一次异常,或使用字符串参数来提供特定的错误信息。

Raise 还可以通过应用简单的 if-then 或 case 语句等方式,根据特定测试诱发异常。

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;

在这里,如果上例中的 Zdim参数大于 Ydim参数,就会引发异常(带信息)。

VB 脚本中的错误

Altium Designer 脚本引擎中的 VBScript 实现内置了可用于 VBScript 脚本项目的函数,如 MsgBox 函数。

语句 On Error语句可用于在 VB 脚本中捕获错误。有关捕获错误的更多信息,请查阅Microsoft VBScript 文档

消息

一般来说,从用户角度来看,消息是增强脚本操作的主要方法。

消息可提供异常警报或指示运行信息和警告,并可插入到处理输入数据、计算、文件操作或任何有利于程序洞察的程序的脚本例程中。

消息对话框

除了脚本系统中的基本消息对话框 (ShowMessage) 之外,还有一系列特定对话框可用于提供量身定制的用户反馈。

其中包括以下消息程序

  • 显示错误
  • 显示异常
  • 显示信息
  • 显示警告
  • 等等。

消息面板

Altium Designer 的 Messages面板是脚本调试的有用工具,也可用于为用户提供有用的信息流。

面板 Messages 面板是一个工作区管理器对象,可从消息管理器界面访问。面板 Messages 面板可在脚本中用于显示变量和属性(或任何其他数据)的状态,以便调试和用户反馈,如下例所示。

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;
AI-LocalizedAI 翻译
如您发现任何问题,请选中相关文本/图片,并按 Ctrl + Enter 键向我们提交反馈。
功能可用性

您可使用的功能取决于您所选择的 Altium 解决方案 —— Altium DevelopAltium Agile(Agile Teams 或 Agile Enterprise 版本),或仍在有效订阅期内的 Altium Designer。

如果您在软件中未找到文中提及的功能,请联系 Altium 销售团队了解更多信息。

旧版文档

Altium Designer 文档不再提供版本区分。如果您需要访问 Altium Designer 旧版本的文档,请前往其他安装程序页面的旧版文档部分。

Content