27.2.实现上的差异
最后更新于
这有帮助吗?
最后更新于
这有帮助吗?
在 FreeBSD 中,DTrace 与 Solaris™ 中的实现相似,但也存在一些差异。主要的区别是,在 FreeBSD 中,DTrace 作为一组内核模块实现,必须加载这些模块才能使用 DTrace。要加载所有必要的模块,可以运行以下命令:
从 FreeBSD 10.0-RELEASE 开始,运行 dtrace
时会自动加载这些模块。
FreeBSD 使用 DDB_CTF
内核选项来启用从内核模块和内核本身加载 CTF
数据的支持。CTF
是 Solaris™ 中的紧凑 C 类型格式,用于封装一种简化的调试信息形式,类似于 DWARF
和经典的 stabs。CTF
数据通过 ctfconvert
和 ctfmerge
构建工具添加到二进制文件中。ctfconvert
工具解析编译器生成的 DWARF
ELF 调试节,ctfmerge
将对象中的 CTF
ELF 节合并到可执行文件或共享库中。
FreeBSD 中存在一些与 Solaris™ 不同的提供者。最显著的是 dtmalloc
提供者,它允许在 FreeBSD 内核中按类型追踪 malloc()
。一些 Solaris™ 中的提供者,如 cpc
和 mib
,在 FreeBSD 中不可用。未来的 FreeBSD 版本中可能会添加这些提供者。此外,两个操作系统中都存在的某些提供者在兼容性上存在差异,因为它们的探针具有不同的参数类型。因此,Solaris™ 上编写的 D 脚本可能需要修改才能在 FreeBSD 上使用,反之亦然。
由于安全性差异,FreeBSD 中只有 root
用户可以使用 DTrace。Solaris™ 具有一些低级安全检查,而这些检查在 FreeBSD 中尚未实现。因此,/dev/dtrace/dtrace 的访问权限严格限制为 root
。
DTrace 受通用开发与分发许可证(CDDL
)的约束。在 FreeBSD 上查看此许可证,请参阅 /usr/src/cddl/contrib/opensolaris/OPENSOLARIS.LICENSE 或在线查看 。虽然带有 DTrace 支持的 FreeBSD 内核是 BSD
许可证授权的,但当模块以二进制形式分发或加载时,使用的是 CDDL
许可证。