使用调试器和其他工具
这些章节介绍了在 AE 进程中使用调试器或其他诊断工具的一般非语言特定介绍。
在主机上运行
一般来说,应在主机上进行调试。 因此,AE 和请求必须在主机上运行。 有两种技术可以让请求在主机上运行:
- 对于标量、表格和聚合函数,SQL 函数接收所有字面参数。
SELECT applyOperationV1Sf('+', 1, 2, 3); SELECT * FROM TABLE WITH FINAL(applyOperationV1Tf('+', 1, 2, 3)); - 对于表格功能,请使用选项--noparallel 注册 AE。
该选项会使 AE 在主机上运行,这样它就可以接收来自普通表和字面量的数据参数。 选项--noparallel不能用于标量函数。 不过,表函数和标量函数使用相同的 AE API,因此可以很容易地从 SQL 表函数调用标量函数 AE 进行调试(因为表函数具有标量函数的超集功能)。 为此,请将作为标量函数写入的 AE 注册为表函数。 大多数表函数 AE 都不能注册为标量函数,除非每输入一行正好返回一行输出,并且一行中正好有一列。
两种调试器方法
在 AE 进程中使用诊断/调试器工具时,一般有两种方法。
- 附加到已运行的进程。
- 让 AE 运行时运行诊断/调试器工具,然后加载 AE。
使用附加方法时,您必须提供 AE 进程 ID,而进程必须等待工具被附加。
本地 AE 和旋转文件
对于本地 AE,可使用旋转文件机制。 激活后,AE 运行时会查找 AE ENV 变量指定的文件。 如果文件存在,AE 运行时会休眠一段时间,然后再次检查文件是否存在。 AE 运行时还会将有关进程的信息打印到标准错误日志文件中。 循环继续,直到文件被重命名或删除。
示例
spinning in process id=15796, thread id=15797 on file /tmp/spin_ae.on
连接工具后,即可删除或重命名文件。 然后 AE 恢复正常执行。
示例
mv /tmp/spin_ae.on /tmp/spin_ae.off
自旋文件机制是通过 AE 环境变量开启的。
--environment "'NZAE_HOST_ONLY_NZAE_SPIN_FILE_NAME'='/tmp/spin_ae.on'"
注意 NZAE_HOST_ONLY_ 前缀的使用是为了防止意外使用 SPU 上的自旋文件机制。
远程 AE
由于远程 AE 通常是一个长时间运行的进程,因此附加一个像 GDB 这样的工具通常要容易得多。 使用 nzaejobcontrol 函数 ping 远程 AE,获取进程 ID 和调试器需要的其他信息。