DTrace 探针

DTrace 探针及其功能的列表。“模块”和“函数”不能在用户定义的探针(称为 USDT)中定义,因此不会指定它们。探针定义格式为

provider:module:function:name(arguments)

由于无法指定模块和函数,它们将为空白。Ruby 的示例探针定义将是

ruby:::method-entry(class name, method name, file name, line number)

其中 “ruby” 是提供程序名称,模块和函数名称为空白,探针名称是 “method-entry”,并且探针接受四个参数

探针列表

稳定性

在我们列出具体的探针之前,让我们谈谈稳定性。探针稳定性在 probes.d 文件底部的 pragma D 属性行中声明。以下是每个稳定性声明的描述。

提供程序名称稳定性

“ruby” 的提供程序名称已被声明为稳定。我们不太可能将提供程序名称从 “ruby” 更改为其他名称。

Module 和函数稳定性

由于我们不允许为模块和函数名称提供值,因此我们提供的值(没有值)被声明为稳定。

探针名称稳定性

探针名称将来可能会更改,因此它们被标记为 “演变中”。使用者不应依赖这些名称保持稳定。

探针参数稳定性

传递给探针的参数将来可能会更改,因此它们被标记为 “演变中”。使用者不应依赖这些参数保持稳定。

声明的探针

探针在 probes.d 文件中定义。以下是声明的探针,以及它们何时触发和它们接受的参数

ruby:::method-entry(classname, methodname, filename, lineno);

此探针在进入方法之前触发。

classname

类名(字符串)

methodname

即将执行的方法的名称(字符串)

filename

方法_被调用_的文件名(字符串)

lineno

方法_被调用_的行号(整数)

注意:仅当启用跟踪时才会触发,例如:TracePoint.new{}.enable。有关详细信息,请参阅 Feature#14104

ruby:::method-return(classname, methodname, filename, lineno);

此探针在方法返回后立即触发。参数与 “ruby:::method-entry” 相同。

注意:仅当启用跟踪时才会触发,例如:TracePoint.new{}.enable。有关详细信息,请参阅 Feature#14104

ruby:::cmethod-entry(classname, methodname, filename, lineno);

此探针在进入 C 方法之前触发。参数与 “ruby:::method-entry” 相同。

ruby:::cmethod-return(classname, methodname, filename, lineno);

此探针在 C 方法返回之前触发。参数与 “ruby:::method-entry” 相同。

ruby:::require-entry(requiredfile, filename, lineno);

此探针在调用 rb_require_safe 时触发(当需要文件时)。

requiredfile

要需要的文件名(字符串)。

filename

调用 “require” 的文件(字符串)。

lineno

调用 require 的行号(整数)。

ruby:::require-return(requiredfile, filename, lineno);

此探针在 rb_require_safe(当需要文件时)返回之前触发。参数与 “ruby:::require-entry” 相同。如果在文件 require 期间发生异常,则此探针不会触发。

ruby:::find-require-entry(requiredfile, filename, lineno);

此探针在调用 search_required 之前触发。search_required 通过搜索已加载的功能 ($") 来确定是否已需要该文件,如果未需要,则找出必须加载的文件。

requiredfile

要需要的文件(字符串)。

filename

调用 “require” 的文件(字符串)。

lineno

调用 require 的行号(整数)。

ruby:::find-require-return(requiredfile, filename, lineno);

此探针在 search_required 返回之后触发。有关详细信息,请参阅 “ruby:::find-require-entry” 的文档。此探针的参数与 “ruby:::find-require-entry” 相同。

ruby:::load-entry(loadedfile, filename, lineno);

此探针在调用 “load” 时触发。参数与 “ruby:::require-entry” 相同。

ruby:::load-return(loadedfile, filename, lineno);

此探针在 “load” 返回时触发。参数与 “ruby:::load-entry” 相同。

ruby:::raise(classname, filename, lineno);

此探针在引发异常时触发。

classname

引发的异常的类名(字符串)

filename

引发异常的文件名(字符串)

lineno

文件中引发异常的行号(整数)

ruby:::object-create(classname, filename, lineno);

此探针在即将分配对象时触发。

classname

分配的对象的类(字符串)

filename

分配对象的文件名(字符串)

lineno

文件中分配对象的行号(整数)

ruby:::array-create(length, filename, lineno);

此探针在即将分配 Array 时触发。

length

数组的大小(长整数)

filename

分配数组的文件名(字符串)

lineno

文件中分配数组的行号(整数)

ruby:::hash-create(length, filename, lineno);

此探针在即将分配 Hash 时触发。

length

哈希的大小(长整数)

filename

分配哈希的文件名(字符串)

lineno

文件中分配哈希的行号(整数)

ruby:::string-create(length, filename, lineno);

此探针在即将分配 String 时触发。

length

字符串的大小(长整数)

filename

分配字符串的文件名(字符串)

lineno

文件中分配字符串的行号(整数)

ruby:::symbol-create(str, filename, lineno);

此探针在即将分配 Symbol 时触发。

str

符号的内容(字符串)

filename

分配字符串的文件名(字符串)

lineno

文件中分配字符串的行号(整数)

ruby:::parse-begin(sourcefile, lineno);

在解析和编译源文件之前触发。

sourcefile

正在解析的文件(字符串)

lineno

源文件开始的行号(整数)

ruby:::parse-end(sourcefile, lineno);

在解析和编译源文件之后触发。

sourcefile

正在解析的文件(字符串)

lineno

源文件结束的行号(整数)

ruby:::gc-mark-begin();

在标记阶段开始时触发。

ruby:::gc-mark-end();

在标记阶段结束时触发。

ruby:::gc-sweep-begin();

在清除阶段开始时触发。

ruby:::gc-sweep-end();

在清除阶段结束时触发。

ruby:::method-cache-clear(class, sourcefile, lineno);

在清除方法缓存时触发。

class

正在清除的类名,或 “global”(字符串)

sourcefile

正在解析的文件(字符串)

lineno

源文件结束的行号(整数)