调试表达式
XPath/XQuery窗口(参见下方截图)的调试模式允许您在活动文件的上下文中对XPath/XQuery表达式进行调试。
在调试模式下,“结果”窗格中添加了两个附加窗格(参见下方截图):
•“调用堆栈和调试点”窗格,每个都在窗格中有自己的选项卡。
•“变量和监视表达式”窗格;监视表达式和变量都显示在同一个窗格中。
“表达式”窗格和“结果”窗格可以水平或垂直地相邻。要在这些布局之间切换,请单击水平/垂直布局按钮(位于窗口工具栏的右上角)。
以下功能在调试模式下可用:
•您可以步入XPath计算过程,并逐步查看XPath表达式是如何计算的。为此,请使用步入(F11)工具栏按钮。在每个计算步骤中,当前正在计算的表达式的部分将突出显示为黄色(参见上方截图),而该步骤的计算结果显示在“结果”窗格中。例如,在上方截图中,已选择book元素的所有section后代元素。
•您可以在想要中止计算的位置设置断点,并在这些位置查看结果。您可以通过仅在断点处暂停来逐步完成计算。为此,请使用开始调试(F5)工具栏按钮。这比在每一步都使用步入(F11)中止要更快。
•您可以设置跟踪点以在标记为跟踪点的位置查看结果报告。计算将不会中止(断点处除外),但跟踪点结果将显示在“结果”窗格的列表中。
•监视表达式可用于检查信息(例如文档数据或计算方面)。这在断点处特别有用。
•范围内的变量,包括它们的值,都显示在“变量和监视表达式”窗格中。
•计算步骤的处理器调用显示在“调用堆栈和调试点”窗格的“调用堆栈”选项卡中。
•如果设置了断点和跟踪点,它们将显示在“调用堆栈和调试点”窗格的“调试点”选项卡中。
有关这些功能的更多信息,请参见下方的描述。
设置调试模式
要切换到调试模式,请单击开始计算/调试(F5)命令(位于工具栏的左上角;参见下方截图)的下拉菜单中的开始计算。进入调试模式后,将出现“监视表达式”窗格和“调用堆栈和调试点”窗格。要开始调试当前的表达式,请单击开始调试或按F5。
请注意,调试模式仅适用于当前文件;它无法用于多个文件。因此,当您切换到此模式时,范围选项将自动设为当前文件。
|
运行调试器
调试XPath/XQuery表达式涉及以下步骤:
1.使您想要在其上运行表达式的XML/JSON文件成为活动文件。
2.在表达式窗格中输入XPath/XQuery表达式。
3.设置所需的断点或跟踪点。断点是指计算中止的点。跟踪点是指计算中被记录的点;因此它能提供计算结果的可跟踪路径。
4.如果单击启动调试程序,除非在表达式中标记了断点,否则计算将以单步方式执行。反复单击启动调试程序,在每个断点后继续,直至计算结束。
5.使用步入/步出/步进功能以逐步执行计算过程。
|
步入、步出和步进计算步骤
步入功能使您能够逐步执行计算过程。每一次点击都会引导您完成计算的相应步骤;当前步骤会在表达式中突出显示(参见下方截图)。步出功能将您带到下一个更高的级别,而步进功能则跳过较低级别的步骤,并带您进入同一级别的下一个步骤。要尝试单步执行功能,请将下方给出的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)。
请注意: | 如果在表达式的某个部分同时设置断点和跟踪点,则将由交替的红色和蓝色虚线标记。 |
另请参见下方的调试点。
变量、监视表达式和调用堆栈
变量和监视表达式显示在“变量和监视表达式”窗格中(位于下方截图的中间底部窗格)。
变量
已在表达式中声明并在当前计算步骤范围内的变量都将与其相应的当前值一起显示。例如,在上方截图中,处理刚刚到达对local:plus函数的调用。\$i变量在local:loop函数的范围内,并且刚刚递增到到2。因此,\$i与其当前值一起显示。\$a和\$b变量不在local:loop中,即不在范围内;因此无法显示它们。
监视表达式
监视表达式是您可以在计算开始之前或计算中止期间输入的表达式。它们可用于以下目的:
•测试特定条件。例如,在上方截图中,\$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函数的调用。尽管这是local:loop的第二次迭代,但没有显示第一次迭代的处理器调用。这是因为这些调用与当前函数调用处于并行级别,并没有导致它的出现。
调试点
“调用堆栈和调试点”窗格的“调试点”选项卡(位于下方截图中的右下方窗格)显示您在表达式上设置的断点(用红圈表示)和跟踪点(用蓝圈表示)。每个调试点都列出了它的行号和字符号。例如,FunctionCall@7:13表示在第7行,第13个字符处有一个调试点。
请注意以下功能:
•对于断点,您可以通过双击输入中断条件,输入条件表达式并按Enter来输入中断条件。仅当条件的计算结果为true时才会启用该断点。例如,在上方截图中,仅当\$i的值为3时,\$i=3中断条件才会启用此函数调用上的断点。截图显示了计算在该断点处中止。
•您可以通过单击相应的工具栏按钮来启用/禁用所有调试点:启用所有调试点和禁用所有调试点 (上方截图中绿圈中的按钮)。禁用一个调试点时,它会在所有计算中保持停用状态,直到它再次被启用。
•您可以在其相应的上下文菜单中启用/禁用单个断点。
窗格中的工具栏命令
调试模式下的XPath/XQuery窗口的窗格(参见上方截图)包含用于导航、搜索和复制功能的按钮。下方表格对这些图标(从左至右)进行了说明。相应的命令也可以在列表项的上下文中找到。
图标 | 功能描述 |
下一个,上一个 | 分别选择结果列表中的下一个和上一个数据项。 |
将所选文本行复制到剪贴板 | 将所选结果项的值列复制到剪贴板。要复制所有列,请打开复制包括所有列命令(参见下文)。 |
将所有消息复制到剪贴板 | 将所有结果项的值列复制到剪贴板,包括空值。每一项都作为一个单独的行进行复制。 |
复制包括所有列 | 在(i) 复制所有列或(ii) 仅复制值列之间切换。列的分隔符是一个空格。 |
查找 | 将打开查找对话框以在结果列表中搜索任何字符串,包括特殊字符。 |
查找上一个 | 搜索上一次在查找对话框中输入的词的上一个匹配项。 |
查找下一个 | 查找上一次在查找对话框中输入的词的下一个匹配项。 |
清除 | 清除结果列表。 |
将多行结果折叠为一行 | 如果结果项的值列包含多行文本(包含换行符的文本),您可以在多行显示和单行显示之间进行切换。 |
显示完整结果 | 将节点的全部内容显示为节点的值。 |
在输出中显示标题 | 显示XML文件和XPath表达式的位置。 |