int dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv);
dcmd 是使用类似于 dcmd() 声明的函数实现的。此函数接收四个参数并返回整数状态。函数参数如下:
当前地址,也称为点。在 dcmd 的开头,此地址对应于调试器中点 "." 变量的值。
包含以下一个或多个标志的逻辑 OR 的整数:
为方便起见,提供了 DCMD_HDRSPEC() 宏,这样 dcmd 就可以测试其标志,以确定它是否应该列显标题行(即,它不作为循环的一部分进行调用,或者它作为循环或管道的第一次迭代被调用)。
argv 数组中的参数数目。
在命令行上 ::dcmd 右侧指定的参数数组。这些参数可以是字符串,也可以是整数值。
dcmd 函数应返回以下整数值之一,这些整数值是在 <sys/mdb_modapi.h> 中定义的。
dcmd 失败,而且当前的循环或管道应该异常中止。这与 DCMD_ERR 类似,但指示在当前循环或管道中不可能有进一步的进展。
每个 dcmd 都包含一个根据 dcmd() 原型示例定义的函数和对应的 mdb_dcmd_t 结构,如 <sys/mdb_modapi.h> 中所定义。 此结构由以下字段组成:
dcmd 的字符串名称,不包含前导的 "::"。该名称不能包含任何 MDB 元字符(如 $ 或 `)。
dcmd 的可选用法字符串,在 dcmd 返回 DCMD_USAGE 时列显它。 例如,如果 dcmd 接受选项 -a 和 -b,则可能将 dc_usage 指定为 "[-ab]"。 如果 dcmd 不接受任何参数,则可能将 dc_usage 设置为 NULL。 如果用法字符串以 ":" 开头,则说明这是简写形式,指示 dcmd 需要显式地址(即,它要求在其 flags 参数中设置 DCMD_ADDRSPEC)。如果用法字符串以 "?" 开头,则表明 dcmd 将根据情况决定是否接受地址。这些提示将相应地修改用法消息。
一个强制性说明字符串,简要说明 dcmd 的用途。此字符串应仅包含单行文本。
指向将被调用以执行 dcmd 的函数的指针。
一个指向 dcmd 的 help 函数的可选函数指针。如果此指针不为 NULL,则在用户执行 ::help dcmd 时将调用此函数。此函数可以使用 mdb_printf() 显示详细信息或示例。