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。有關更多詳細資訊,請參閱 功能 #14104

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

此探測在函數返回後立即觸發。引數與「ruby:::method-entry」相同。

注意:僅在啟用追蹤時才會觸發,例如:TracePoint.new{}.enable。有關更多詳細資訊,請參閱 功能 #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 的行號(int)。

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

此探測在 rb_require_safe(當檔案需要時)回傳之前觸發。引數與「ruby:::require-entry」相同。如果在檔案需要期間發生例外狀況,此探測不會觸發。

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

此探測在呼叫 search_required 之前觸發。search_required 透過搜尋已載入的功能($")來判斷檔案是否已需要,如果沒有,則找出必須載入的檔案。

requiredfile

要需要的檔案(字串)。

filename

呼叫「require」的檔案(字串)。

lineno

呼叫 require 的行號(int)。

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

引發例外狀況的檔案中的行號(int)

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

此探測在準備配置物件時觸發。

classname

已配置物件的類別(字串)

filename

配置物件的檔案名稱(字串)

lineno

配置物件的檔案中的行號(int)

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

此探測在準備配置 Array 時觸發。

長度

陣列的大小(長整數)

filename

配置陣列的檔案名稱(字串)

lineno

配置陣列的檔案中的行號(int)

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

此探測在準備配置 Hash 時觸發。

長度

雜湊的大小(長整數)

filename

配置雜湊的檔案名稱(字串)

lineno

配置雜湊的檔案中的行號(int)

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

當準備配置 String 時,會觸發此探測。

長度

字串大小 (長整數)

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

原始碼結束的行號 (整數)