What should you do when things go awry with your scripting?What should you do when things go awry with your scripting?What should you do when things go awry with your scripting?What should you do when things go awry with your scripting?当你的脚本出现问题时你应该做什么?欢迎回来!
如果您刚刚加入我们,那么您就已经加入了旨在让人们开始使用 JMP 脚本语言的系列。 与之前的条目不同该系列,您可能不需要阅读其他条目才能理解这一条目,但如果您想一起玩并完成其他条目的作业,请参阅以下链接
另外,非常感谢克里斯蒂安·斯托普( @克里斯蒂安斯托普)建议该系列中的此条目。
该系列的这一部分在很大程度上是一个独立的条目。 但是,在事情的发展过程中,这可能是您开始使用某些代码并可能看到一两条错误消息的时刻。 因此,在我们开始任何严肃的代码争论之前,让我们先介绍一下当事情出现问题时该怎么办。
JSL 中最常见的错误
贾斯汀·奇尔顿( @Justin_Chilton )和温迪·墨菲( @Wendy_Murphrey )是最好的脚本编写者之一联合管理计划。 在 2020 年美洲 JMP Discovery 峰会上,他们(虚拟)提交了一篇题为“最常见的 JSL 错误以及如何避免它们”的论文。可以找到该演示文稿的 PowerPoint 文件这里关于社区。
对于新编剧来说,这是 14 页的纯金书。 在本系列中我们所做的事情中,其中一些内容有点超出了范围,但对于您脚本编写之旅的后续步骤来说将是非常宝贵的。 帮我做一个扎实的工作,下载 pdf 文件,把它放在一个你不会忘记的地方,然后在社区页面上给这篇论文点赞。
Mike 最常见的 JSL 错误
作为对贾斯汀和温迪工作的一点重复,我想在他们的清单中添加一些内容。 这些都是非常基本的,通常会导致脚本在运行之前崩溃(这就是为什么它们没有出现在探索峰会论文中)。
胶水
缺少 Glue Operators 可能是 JSL 最常见的错误。 正如我之前提到的,Glue 运算符是您在 JSL 中每条指令末尾看到的分号 (“;”)。 如果您使用红色小三角菜单将脚本保存到脚本窗口(请参阅上一篇文章),JMP 将在需要的地方添加胶水。 如果您手动编写代码,可以使用一个技巧来确保您没有忘记某个地方。 在脚本编辑器中右键单击并选择重新格式化脚本。

这个技巧实际上会捕获脚本中许多与基本语法相关的错误。 当您在脚本编辑器中时,还有一个键盘快捷键(但它在“脚本编辑器框”中不起作用)。 我自己更喜欢键盘快捷键。 对于 Windows 来说,它是CTRL+M 。 对于 MacOS 来说是命令+M 。
现在,在我向您展示如何解压缩出现错误时重新格式化脚本告诉您的内容之前,让我先展示另一个让我抓狂的错误。 由于它们都使用类似的调试工作流程,我保证这很快就会有意义。
括号
将括号(方括号、大括号等)放错位置(或丢失)可能是需要追踪的最隐蔽的错误。 我的意思是它是一个特别的有点令人沮丧。 JMP 中有一个工具可以帮助您追踪不匹配的括号对。 当您将光标放在括号外部时,脚本编辑器将以蓝色突出显示它(以及它认为匹配的内容)。

如果脚本编辑器感到困惑,或者找不到匹配项,它将以红色突出显示括号。

因此,如果括号的蓝色匹配不是您期望的位置,或者括号以红色突出显示,则您可能遇到了问题。
当您因缺少括号而出现错误时,您可能会想继续将它们添加到末尾,直到错误消失。 我只想说这是一个坏主意,然后继续针对这个问题和缺少胶水的问题采取一些更好的策略。 它们都围绕设置 JMP 的脚本编辑器展开。
设置(和使用)脚本编辑器以取得成功
JMP 脚本编辑器(我们在上一篇文章)具有许多使代码处理和调试变得更容易的功能。 我的偏好设置中默认启用了这些,我建议您也这样做。 要访问 JMP 首选项对话框,请选择优先从 JMP 菜单 (MacOS) 或文件菜单 (PC)。

我在屏幕截图中突出显示了我认为真正有用的选项。 代码折叠对于较大的脚本非常有用。 行号和自动完成选项对于我们当前的讨论更为重要。
如何使用日志
现在我们已经设置了脚本编辑器,让我们学习如何使用日志。 首先,要打开日志,请转到查看 > 日志(窗口 > 日志在 Mac 上)。 这将打开一个类似于脚本编辑器的窗口。 它与脚本编辑器的不同之处在于它显示输出命令的结果和结果在脚本编辑器中运行。 如果您希望将输入和输出保留在同一窗口中,则可以通过在脚本编辑器中右键单击并选择来打开脚本编辑器中的嵌入式日志显示嵌入日志。

让我们看看使用这个脚本是如何工作的:

脚本非常简单。 除了第 2 行和注释之外,它是使用以下命令创建的保存脚本...到脚本窗口。 如果我跑重新格式化脚本(也可以通过在脚本窗口中右键单击找到),我收到以下错误消息:

在日志中,您会得到类似的内容:

在灰色区域中,您可以看到输入的内容。 在其下方,您会看到一条有关意外情况的消息以及有关可能出现问题的建议。 在这种情况下,JMP 认为缺少粘合 (;)。 它还通过行号告诉您脚本中意外输入的位置。 由于 JSL 是按顺序运行的(从上到下),这意味着错误位于第 5 行上方的某个位置。 因为我们已经打开了行号,所以我们可以看到第 2 行缺少 Glue Operator,这意味着 JMP 并不期望新命令从第 5 行开始,因此感到惊讶。 在第 2 行末尾添加分号后,运行重新格式化脚本不应返回任何错误。
同样,如果我们缺少括号对的一部分(例如圆括号),如下所示(注意第 7 行):

我们会收到以下错误消息:

带有日志消息:

来自 JMP 的这些消息不太明确,但以下是如何解释它们的方法。 首先,从错误消息中我们知道问题出在Distribution上。 在日志和错误消息之间,很可能某个地方缺少括号。 日志显示第 11 行发生了意外情况(“Column ...”有时会有所帮助,但您必须计算字符数才能使用它)。 突出显示括号的颜色表明第一个括号丢失了(请注意,将光标置于左侧后,第 5 行中“分布”旁边的括号上的红色)。

继续使用突出显示来找出缺失的位置(在本例中为第 7 行)。 在大多数情况下,日志是了解 JMP 认为正在发生的情况的一个非常有用的窗口。 但是,如果您想检查 JSL 是否有错误或逐步完成代码,可以使用另一个工具。
如何使用 JSL 调试器
JSL 调试器有点奇怪。 如果您不小心按下了调试器按钮:

您可能已经知道它在运行时会锁定 JMP 中的主界面。 当我开始编写脚本时,我确实没有经常使用它。 现在我已经与开发团队就此进行了几次交谈,我可以说我正在接受它。 让我们来谈谈它以及它可以做什么。
首先,关于锁定 JMP 的一点。 这有点令人困惑,但它实际上所做的是创建 JMP 的第二个实例来运行调试。 只要 JSL 调试器处于活动状态,JMP 的主实例就不会响应。 如果关闭 JSL 调试器,您将重新获得控制权。
当您启动 JSL 调试器时,除了另一个 JMP 实例之外,您还会获得 JSL 调试器窗口。 该窗口包含您的代码、不同变量的列表、日志和其他信息。 它看起来像这样:

当您进行调试时,此窗口是您了解脚本在 JMP 中执行的操作的眼睛和耳朵。 如果您有第二个屏幕,请将其移到那里,以便您始终可以看到它(有时它可能会被埋在其他窗口后面)。
现在,我可以疯狂地描述您可以使用 JSL 调试器执行的所有操作,但是文档中有一个很棒的章节(带有示例!),您可以找到这里。
还有一个不错的梅兰妮·德雷克 (Melanie Drake) 的博客文章( @Melanie_J_Drake ),其中介绍了您可以使用 JSL 调试器执行的一些很酷的操作。 因此,如果您想深入了解一下,请看一下这些内容。 出于我们的目的,我希望您注意这些按钮:

前两个运行脚本。 第一个将脚本运行到其结尾或遇到断点的位置(如果您不想运行整个脚本,则需要停止评估的点)。 您可以通过右键单击 JSL 调试器中的行号旁边来在代码中设置断点。 该行旁边将出现一个红点(断点需要位于代码行上,而不是注释上!)。

如果您要使用第一个运行此脚本跑步按钮,它将运行到第 10 行,然后停止。 第二次按下跑步按钮将完成脚本。 第二跑步按钮运行整个脚本而不关注断点。 这红色停止按钮退出调试器,如果您意外打开它或已完成调试会话,这会很有用。 这重复按钮重置所有内容以再次运行脚本(例如,如果您想更改断点所在位置,然后重新运行代码)。
家庭作业
这周的作业很轻松。 我希望您设置脚本编辑器,找到日志,并使用文档中的一些示例脚本开始使用 JSL 调试器。 查看调试器窗口左下角的选项卡中弹出哪些变量。 另外,找到日志右下角的选项卡(这样你就知道它在哪里)。
下周,我们将讨论我们将要介绍的“编码”的最后一部分这个系列。
当我尝试启动调试器时,JMP 立即崩溃到桌面。 2021 年在 Windows 10 上全新安装 JMP 14 pro。 这是一个公司系统,所以我想可能有一些端口的东西......但我的 pycharm IDE 没有这个问题,所以我对 JMP 感到沮丧