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” 更改为其他名称。
模块
和函数稳定性-
由于我们不允许为模块和函数名称提供值,因此我们提供的值(无值)被声明为稳定。
- 探针名称稳定性
-
探针名称将来可能会更改,因此它们被标记为 “Evolving”(发展中)。使用者不应依赖这些名称的稳定性。
- 探针参数稳定性
-
传递给探针的参数将来可能会更改,因此它们被标记为 “Evolving”(发展中)。使用者不应依赖这些参数的稳定性。
已声明的探针¶ ↑
探针在 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
-
源的结束行号(整数)