调试表达式
XPath/XQuery窗口(参见下方截图)的调试模式允许您对适用于活动文件的XPath/XQuery表达式进行调试。
在调试模式下,“结果”窗格中添加了两个附加窗格(参见下方截图):
•“监视表达式和变量”窗格;监视表达式和变量显示在同一个窗格中,您可以显示/隐藏变量。
•“调用堆栈和调试点”窗格,每个都在窗格中有自己的选项卡。

“表达式”窗格和“结果”窗格可以水平或垂直地相邻。要在这些布局之间切换,请单击水平/垂直布局按钮(位于窗口工具栏的右上角)。
以下功能在调试模式下可用:
•您可以步入XPath计算过程,并逐步查看XPath表达式是如何计算的。为此,请使用步入(F11)工具栏按钮。在每个计算步骤中,当前正在计算的表达式的部分将突出显示为黄色(参见上方截图),而该步骤的计算结果显示在“结果”窗格中。例如,在上面的截图中,book元素的所有section后代元素都被选中,无论它们是book的子元素,还是嵌套在更下方。
•“监视表达式和变量”窗格始终显示当前正在计算的表达式步骤的上下文节点。因此,在上面的截图中,当前正在计算的表达式步骤是//section。其上下文节点为book。因此,book节点及其内容被作为上下文项显示。
•您可以在想要中止计算的位置设置断点,并在这些位置查看结果。您可以通过仅在断点处暂停来逐步完成计算。为此,请使用开始调试(F5)工具栏按钮。这比在每一步都使用步入(F11)中止要更快。
•您可以设置跟踪点以在标记为跟踪点的位置查看结果报告。计算将不会中止(断点处除外),但所有的跟踪点结果都将显示在“结果”窗格的列表中。
•监视表达式可用于在计算过程中检查信息(例如文档内容或计算的各个方面)。最有用的是在同一窗口中显示上下文项。这使您能够评估监视表达式的结果与上下文项之间的关系。您可以输入多个监视表达式,这对于在同一上下文项中比较不同表达式的结果非常有用。
•范围内的变量,包括它们的值,都显示在“监视表达式和变量”窗格中。您可以分别打开/关闭全局变量和局部变量的显示。将上下文项中变量的值与监视表达式的结果一起查看可能非常有用。
•计算步骤的处理器调用显示在“调用堆栈和调试点”窗格的“调用堆栈”选项卡中。
•如果设置了断点和跟踪点,它们将显示在“调用堆栈和调试点”窗格的“调试点”选项卡中。
有关这些功能的更多信息,请参见下方的描述。
设置调试模式
要切换到调试模式,请单击开始计算/调试(F5)命令(位于工具栏的左上角;参见下方截图)的下拉菜单中的开始计算。进入调试模式后,将出现“监视表达式”窗格和“调用堆栈和调试点”窗格。要开始调试当前的表达式,请单击开始调试或按F5。

请注意,调试模式仅适用于当前文件;它无法用于多个文件。因此,当您切换到此模式时,范围选项将自动设为当前文件,并且无法更改。
|
运行调试器
调试XPath/XQuery表达式涉及以下步骤:
1.使您想要在其上运行表达式的XML/JSON文件成为活动文件。
2.选择您想要调试的表达式的XPath/XQuery(Update)版本。
3.在表达式窗格中输入XPath/XQuery表达式。
4.设置所需的断点或跟踪点。断点是指计算中止的点。跟踪点是指计算中被记录的点;因此它能提供计算结果的可跟踪路径。
5.如果单击启动调试程序,除非在表达式中标记了断点,否则计算将以单步方式执行。反复单击启动调试程序,在每个断点后继续,直至计算结束。
6.使用步入/步出/步进功能以逐步执行计算过程。您还可以使用 "运行到光标 "功能,直接转到光标所在的表达式步骤。
|
步入、步出和步进计算步骤
步入功能使您能够逐步执行计算过程。每一次点击都会引导您完成计算的相应步骤;当前步骤会在表达式中突出显示(参见下方截图)。步出功能将您带到下一个更高的级别,而步进功能则跳过较低级别的步骤,并带您进入同一级别的下一个步骤。要尝试单步执行功能,请将下方给出的XQuery 3.1表达式复制到“表达式”窗格中,然后单击三个单步执行按钮来以查看它们是如何工作的。
declare function local:plus(\$a, \$b) { \$a + \$b };
declare function local:loop() { for \$i in 1 to 10 return (local:plus(\$i, \$i+1), local:plus(\$i+1, \$i+2)) };
local:loop() |
下方截图显示了在第一次循环期间(即\$i=1时)到达加法步骤\$a + \$b时,处理中止的那一点的计算。在这一加法步骤中,结果显示为3(1+2的结果)。

断点
断点是指在启动调试程序后您想要调试器暂停的点。它们对于分析表达式的特定部分十分有用。当调试器在断点处停止时,您可以检查结果,并使用步进功能来显示下一步计算的结果。要设置断点,请将光标放在表达式中要设置断点的位置,并单击插入/删除断点(F9)工具栏按钮。断点将被标记为红色虚线。要删除断点,请选中它并单击插入/删除断点(F9)。
另请参见下方的调试点。
跟踪点
跟踪点是指记录结果的点。这些结果将显示在结果选项卡的跟踪树中(参见下方截图)。这使您能够查看表达式特定部分的所有计算结果。例如,在下方截图中,已在\$a、\$b和local:plus(\$i, \$i+1)上设置了跟踪点;在循环的第一次迭代期间这些跟踪点的结果显示在跟踪树中:\$a=1, \$b=2, and local:plus(\$i, \$i+1)=3.
要设置跟踪点,请将光标放在要设置跟踪点的位置,并单击插入/删除跟踪点(Shift+F9)工具栏按钮。跟踪点将被标记为蓝色虚线(参见下方截图)。要删除跟踪点,请选中它并单击插入/删除跟踪点(F9)。

请注意: | 如果在表达式的某个部分同时设置断点和跟踪点,则将由交替的红色和蓝色虚线标记。 |
另请参见下方的调试点。
监视表达式和变量
监视表达式和变量显示在“监视表达式和变量”窗格中(位于下方截图的中间底部窗格)。
监视表达式
监视表达式是您可以在计算开始之前或计算中止期间输入的表达式。它们可用于以下目的:
•测试特定条件。例如,在上方截图中,监视表达式\$i=1 to 5用于测试\$i变量在处理过程中的任何给定时间是否在给定范围内。结果为true意味着此条件在当前处理上下文中已满足。
•在特定上下文中查找数据。例如,在Company元素的上下文中,我们可以输入@id监视表达式以在目标XML文档中查找公司的客户代码。
•生成附加数据。例如,在上方截图中,if (\$i=1 to 5) then (concat("Iteration ", \$i)) else "Out of Loop”监视表达式可以生成一个合适的字符串,以表明当前处于循环的哪个迭代阶段。
要输入监视表达式,请单击窗格工具栏中的添加监视条目,然后输入表达式并单击Enter。要删除监视表达式,请选择它并单击工具栏中的删除监视表达式条目。如果在调试期间由于某些原因(例如,其中一个变量不在范围内)无法正确计算表达式,则该监视表达式将变为红色。
变量
已在表达式中声明并在当前计算步骤范围内的变量都将与其相应的当前值一起显示。例如,在上方截图中,处理刚刚到达对local:plus函数的调用。\$i变量在local:loop函数的范围内,并且刚刚递增到到2。因此,\$i与其当前值一起显示。您可以通过点击相应的工具栏图标来打开/关闭全局变量和局部变量的显示。
窗格中的图标
下面是窗格中的图标及其对应的功能。
图标 | 功能描述 |
下一个,上一个 | 分别选择结果列表中的下一个和上一个数据项。 |
将所选文本行复制到剪贴板 | 将所选结果项的值列复制到剪贴板。要复制所有列,请打开复制包括所有列命令(参见下文)。 |
将所有消息复制到剪贴板 | 将所有结果项的值列复制到剪贴板,包括空值。每一项都作为一个单独的行进行复制。 |
复制包括所有列 | 在(i) 复制所有列或(ii) 仅复制值列之间切换。列的分隔符是一个空格。 |
查找 | 将打开查找对话框以在结果列表中搜索任何字符串,包括特殊字符。 |
查找上一个 | 搜索上一次在查找对话框中输入的词的上一个匹配项。 |
查找下一个 | 查找上一次在查找对话框中输入的词的下一个匹配项。 |
展开子级 | 将展开所选项及其所有后代。 |
折叠子级 | 将折叠所选项及其所有后代。 |
清除 | 清除结果列表。 |
调用堆栈
“调用堆栈和调试点”窗格的调用堆栈选项卡(位于上方截图中的右下方窗格)显示到调试中该点的处理器调用。当前的处理器调用被突出显示为黄色。请注意,仅显示直接导致当前计算步骤的调用。例如,在上方截图中,当前的计算步骤是对local:plus函数调用中的一个算术计算表达式。尽管这是local:loop的第二次迭代,但没有显示第一次迭代的处理器调用。这是因为这些调用与当前函数调用处于并行级别,并没有导致它的出现。
调试点
“调用堆栈和调试点”窗格的“调试点”选项卡(位于下方截图中的右下方窗格)显示您在表达式上设置的断点(用红圈表示)和跟踪点(用蓝圈表示)。每个调试点(断点或跟踪点)都列出了它的行号和字符号。例如,FunctionCall@7:17表示在第7行,第17个字符处有一个调试点。

请注意以下功能:
•对于断点,您可以通过双击输入中断条件,输入条件表达式并按Enter来输入中断条件。仅当中断条件的计算结果为true时才会启用该断点。例如,在上方截图中,仅当\$i的值为3时,\$i=3中断条件才会启用此函数调用上的断点。截图显示了计算在该断点处中止。
•您可以通过单击相应的工具栏按钮来启用/禁用所有调试点:启用所有调试点和禁用所有调试点。禁用一个调试点时,它会在所有计算中保持停用状态,直到它再次被启用。
•遇到处理错误时,您还可以通过打开/关闭相应的工具栏图标来启用/禁用处理中断。
•您可以在各个断点的上下文菜单中启用/禁用断点,也可以点击它们的圆圈图标。如果圆圈图标呈灰色,则表示该调试点已被禁用。
显示选项
当您点击XPath/XQuery窗口右上角的显示选项按钮(齿轮图标)时,会出现一个对话框,您可以在其中指定“结果”窗格和“监视表达式和变量”窗格的显示选项。您可以分别为每个窗格选择显示选项:
•将结果显示为可扩展的树结构或序列化的XML字符串(节点显示为文本字符串,就像在XML文档中写入一样),以及
•以内联的形式显示特性,这意味着特性及其值与元素显示在同一行上(除了显示在节点的树结构中之外)。