Solaris 动态跟踪指南

第 41 章 版本控制

第 39 章中,我们已了解了用于确定所创建的 D 程序的稳定性属性的 DTrace 功能。创建具有合适的稳定性属性的 D 程序后,您可能还希望将此程序与 D 编程接口的特定版本进行绑定。D 接口版本是一个标签,适用于 D 编译器提供的一组特定类型、变量、函数、常量和转换器。如果您指定到 D 编程接口特定版本的绑定,则可确保在 DTrace 将来版本上重新编译程序,而不会在定义的程序标识符和 D 编程接口将来版本中定义的标识符之间遇到冲突。您应为要作为持久性脚本(请参见第 15 章)安装,或在分层工具中使用的任何 D 程序都建立版本绑定。

版本和发行版

D 编译器使用版本字符串,标记与特定软件发行版对应的类型、变量、函数、常量和转换器的集合。版本字符串是一个由句点分隔的十进制整数序列,格式为 "x"(主发行版本号)、"x.y"(次发行版本号)或 "x.y.z"(微发行版本号)。版本是通过从左至右比较各整数来进行比较的。如果最左边的整数不相等,则包含较大整数的字符串的版本更高(因此更新)。如果最左边的整数相等,则按从左至右的顺序对下一个整数进行比较以确定结果。在版本字符串中,所有未指定的整数在版本比较过程中都被解释为零。

DTrace 版本字符串符合 Sun 的接口版本标准命名规则,如 attributes(5) 中所述。D 编程接口发生的更改将产生一个新的版本字符串。下表概述了 DTrace 使用的版本字符串,以及对应的 DTrace 软件发行版的可能含义。

表 41–1 DTrace 发行版版本

发行版 

版本 

含义 

主 

x.0

主发行版可能包含较多新增的主要功能;符合各种可能不兼容的标准修订版;尽管不太可能,但可以更改、删除或替换标准接口或稳定接口(请参见第 39 章)。D 编程接口的初始版本被标记为 1.0 版。

次 

x.y

x.0 或早期版本(其中 y 不等于零)相比较,新的次发行版可能包含较少的新增功能、兼容的标准接口和稳定接口、可能不兼容的发展中接口或不稳定接口。这些更改可能包括新内置的 D 类型、变量、函数、常量和转换器。另外,次发行版可能会取消对以前标记为“过时”(请参见第 39 章)的接口的支持。

微 

x.y.z

微发行版适用于与以前的发行版(其中 z 不等于零)兼容的接口,但可能会提供错误修复、性能增强功能以及对其他硬件的支持。 

通常,D 编程接口的每个新版本都会提供一个以前版本提供的功能超集,已被删除的任何过时接口除外。

版本控制选项

缺省情况下,使用 dtrace -s 编译或使用 dtrace -P-m-f-n-i 命令行选项指定的任何 D 程序都会绑定到 D 编译器提供的 D 编程接口的最新版本。您可以使用 dtrace -V 选项确定 D 编程接口的当前版本:


$ dtrace -V
dtrace: Sun D 1.0
$

如果要与 D 编程接口的特定版本建立绑定,可将 version 选项设置为相应的版本字符串。与其他 DTrace 选项(请参见第 16 章)类似,您可以使用 dtrace -x 在命令行上设置版本选项:


# dtrace -x version=1.0 -n 'BEGIN{trace("hello");}'

或者使用 #pragma D option 语法在 D 程序源文件中设置该选项:

#pragma D option version=1.0

BEGIN
{
	trace("hello");
}

如果您使用 #pragma D option 语法请求版本绑定,则必须将该指令放在 D 程序文件的顶部,位于任何其他声明和探测子句前面。如果版本绑定参数为无效的版本字符串,或引用了 D 编译器未提供的版本,则会生成相应的错误消息,并且编译将会失败。因此,您也可借助版本绑定功能,使在 DTrace 版本上执行 D 脚本失败,并生成直观的错误消息。

编译程序声明和子句之前,D 编译器会将相应接口版本的 D 类型、函数、常量和转换器集装入编译器名称空间。因此,指定的任何版本绑定选项仅控制对程序可见的标识符、类型和转换器集,以及程序定义的变量、类型和转换器。版本绑定可防止 D 编译器装入可能会定义与程序源代码中的声明冲突,并因此产生编译错误的标识符或转换器的新接口。有关如何选择不会与 DTrace 将来版本提供的接口冲突的标识符名称的技巧,请参见标识符名称和关键字

提供器版本控制

与 D 编译器提供的接口不同,DTrace 提供器(即探测器和探测器参数)提供的接口不受 D 编程接口或前面介绍的版本绑定选项的影响,或与其没有关联。建立可用的提供器接口是将编译后的检测过程装入操作系统内核的 DTrace 软件中的过程的一部分,此过程因指令集体系结构、操作平台、处理器、Solaris 系统中安装的软件以及当前的安全权限而异。D 编译器和 DTrace 运行时将检查 D 程序子句中描述的探测器,并在 D 程序请求的探测器不可用时报告相应的错误消息。这些功能与 D 编程接口版本互不相关,因为 DTrace 提供器不会导出可能与 D 程序中的定义冲突的接口;也就是说,您只能启用 D 中的探测器,而不能对其进行定义,并且探测器名称保留在一个与其他 D 程序标识符分开的名称空间中。

DTrace 提供器提供了一个特定的 Solaris 发行版,在《Solaris 动态跟踪指南》的相应版本中,对该提供器进行了介绍。在该指南中,与每个提供器对应的章节还将说明对给定提供器所做的任何相关更改,以及该提供器提供的新功能。您可以使用 dtrace -l 选项来了解 Solaris 系统中可用的提供器和探测器的集合。提供器使用 DTrace 稳定性属性标记其接口,因此,您可以使用 DTrace 稳定性报告功能(请参见第 39 章),确定在将来的 Solaris 发行版中,是否可能会更改或提供 D 程序使用的提供器接口。