Solaris 模块调试器指南

dcmd 管道

使用 | 运算符可以将 dcmd 编入管道中。管道的用途是将值列表(通常为虚拟地址)从一个 dcmd 或 walker 传递到另一个 dcmd 或 walker。可以使用管道阶段将一种数据结构类型的指针映射到指向对应数据结构的指针,对地址列表排序,或者选择具有某些属性的结构的地址。

MDB 按从左向右的顺序执行管道中的每个 dcmd。最左侧的 dcmd 是使用点的当前值执行的,或者是使用命令开头的显式表达式指定的值执行的。遇到 | 运算符时,MDB 将在其左侧的 dcmd 输出和 MDB 解析器之间创建一个管道(共享缓冲区)以及一个空白值列表。

在 dcmd 执行时,其标准输出放置在管道中,然后由解析器使用和计算,好像 MDB 从标准输入读取此数据。每行都必须包含以 NEWLINE 或分号 (;) 结尾的算术表达式。将表达式的值附加到与管道关联的值列表。如果检测到语法错误,则中止管道。

| 运算符左侧的 dcmd 完成后,使用与管道关联的值列表调用 | 运算符右侧的 dcmd。对于列表中的每个值,将点设置为此值并执行右侧的 dcmd。只有管道中最右侧的 dcmd 才将其输出列显到标准输出。如果管道中的任何 dcmd 产生标准错误输出,则这些消息将直接列显为标准错误,而不作为管道的一部分进行处理。