我們可以像在內核空間中的函數 一樣轉儲用戶空間函數的函數參數嗎?如果我們 做dtrace -l -f -v,FBT提供者是否可以爲用戶空間函數轉儲參數?FreeBSD用戶空間用戶空間的DTrace和轉儲函數參數
我DTrace'ing「頂」工具,(「頂」實用兼具 周大福和矮調試節中創建的目標文件中)
我想通過視察「叫get_system_info功能頂」,我 確認存在被探測
root% dtrace -l | grep get_system_info
55154 pid8488 top get_system_info entry
但我不能轉儲函數的自變量...
root% dtrace -l -f get_system_info -v
ID PROVIDER MODULE FUNCTION NAME
55154 pid8488 top get_system_info entry
Probe Description Attributes
Identifier Names: Private
Data Semantics: Private
Dependency Class: Unknown
Argument Attributes
Identifier Names: Private
Data Semantics: Private
Dependency Class: Unknown
Argument Types
None
測試用一個簡單的腳本,
pid8488::get_system_info:entry
{
this->info = (struct system_info *)copyin(args[0], sizeof(struct system_info));
}
...如果我用的是ARGS [0]符號,它說以下,
dtrace: failed to compile script top_d.d: line 17: index 0 is out of
range for pid8488::get_system_info:entry args[ ]
相反,如果我爲arg0取代,它編譯但值不是 必然是理智的。 示例結構system_info的ncpus成員顯示垃圾值。
完整的劇本是
pid8488::get_system_info:entry
{
this->info = (struct system_info *)copyin(arg0, sizeof(struct system_info));
printf("last pid [%d] \n", this->info->last_pid);
}
pid8488::get_process_info:entry
{
this->info = (struct system_info *)copyin(arg0, sizeof(struct system_info));
printf("ncpus [%d] \n", this->info->ncpus);
}
運行此
55154 get_system_info:entry last pid [8513]
55155 get_process_info:entry ncpus [134558720]
應該是顯示CPU的數量?任何腳本錯誤?