Solaris 动态跟踪指南

稳定转换

虽然转换器提供了将信息转换为稳定的数据结构的功能,但并不需要解决转换数据时可能产生的所有稳定性问题。例如,如果 xlate 操作本身的输入表达式引用“不稳定”的数据,则产生的 D 程序也将“不稳定”,因为程序稳定性的计算结果始终为累积的 D 程序语句和表达式的最低稳定性。所以,要允许构造稳定的程序,有时必须为转换器定义特定的稳定输入表达式。可以使用 D 内置机制来协助进行此类稳定转换

DTrace procfs.d 库提供先前说明的 curlwpsinfocurpsinfo 变量作为稳定转换。例如,curlwpsinfo 变量实际上是按如下方式声明的 inline

inline lwpsinfo_t *curlwpsinfo = xlate <lwpsinfo_t *> (curthread);
#pragma D attributes Stable/Stable/Common curlwpsinfo

curlwpsinfo 变量被定义为从 curthread 变量(指向表示线程的内核“专用”数据结构的指针)到“稳定”lwpsinfo_t 类型的内置转换。D 编译器将处理此库文件,并高速缓存 inline 声明,从而使 curlwpsinfo 显示为任何其他 D 变量。紧跟在声明后面的#pragma 语句用于将 curlwpsinfo 标识符的属性显式重置为“稳定/稳定/公用”,从而屏蔽对内置表达式中的 curthread 的引用。D 功能的这种组合允许 D 程序员安全地使用 curthread 作为转换源,Sun 可以同时将该转换源更新为 Solaris 实现中的相应更改。