调试跟踪器

这个标签页让您可以在代码执行时查看变量的状态。无论是修复一个不再正常工作的脚本,还是单纯处于调试阶段,它都非常有用。

从控制台运行的调试点,以及调试跟踪器

要使用调试功能,您需要在代码中插入一条 debug 指令,语法如下:debug(parameter : text);当代码运行到该 debug 指令时,调试跟踪器标签页中就会生成一个条目,以该参数的内容作为标题,下方则是当时所有可用变量及其当前值的结构。

Ninext 面板必须处于打开状态:面板关闭时,到达的调试点不会被记录。而调试跟踪器标签页本身不必显示在最前面。

要试用本页的示例,请将它们粘贴到控制台中并运行:调试跟踪器会立即显示其中的调试点。跟踪器右上角的垃圾桶图标可清空列表。

提示:您可以把任何特别关注的变量拼进文本字符串中,以便在调试跟踪器标签页中立即看到它的值——但要确保类型是文本!(例如 debug("Debug point 1 : " + Variable1); )

仔细观察该标签页可以发现,每执行一次 debug 指令,就会新增一行。

这一行包含调试点的名称,也就是作为参数传给 debug 函数的文本,例如:debug("my debug point")。

行首还会显示距离上一条调试行所经过的时间。这有助于评估代码的性能(见下文)。第一行的值始终为“start”。

这条调试行本身包含若干变量行,脚本中此处可见的每个变量各占一行:debug 指令之前声明的变量、循环变量,甚至包括正在声明中的变量,此时它的值为“void”。每个变量行包含名称、类型、值,以及声明该变量处的一小段代码。

调试跟踪器中一行的构成

展开、复制、打开

值的显示方式与控制台中相同:

  • 列表、记录、对象、引用或包含 JSON 的文本,点击其箭头即可展开;
  • 鼠标悬停在某一行上时会出现一个复制其值的按钮;在调试点所在的行上,它会复制整条跟踪记录;
  • 带下划线的值表示一条记录:点击即可在 Ninox 中打开它。

在循环中的用法

把 debug 放在循环内部,可以查看循环每一轮迭代时变量的状态。您还能看到每轮迭代所花的时间。在下面的例子中,间隔时间大多低于 1 毫秒。

Ninox
let a := select Customer
let d := for i in a do
           debug("for each customer");
           i.'first name' + " " + i.'last name';
         end;
debug("all customers");
d;

循环中的调试点

但如果我们加入一条执行开销较大的指令,例如“select”指令,就会看到每轮迭代之间的时间显著增加。

Ninox
let a := select Customer
let d := for i in a do
           let e := select Invoice where Customer = i;
           debug("for each customer");
           i.'first name' + " " + i.'last name' + " " + sum(e.TOTAL);
         end;
debug("all customers");
d;

循环中 select 的开销

在一段脚本的前后各放一条 debug 指令,就可以测量该脚本的总执行时间:

Ninox
debug("start of script");
let a := select Customer
let d := for i in a do
           i.'first name' + " " + i.'last name';
         end;
debug("end of script");
d;

测量脚本的总执行时间