抱歉标题过于复杂,但这是我的脚本的 dtrace 输出,我认为这将有助于解释我在说什么:
16384 1
38048 1
38050 1
38051 1
38055 1
-58632623 1
-5180681 1
-4576706 1
-4498881 1
-4472021 1
-4464140 1
<...>
mymodule.so`FuncXXX
mymodule.so`FirstFunc+0x23c
8
mymodule.so`FuncXXX
mymodule.so`SecondFunc+0x4bc
9
mymodule.so`FuncXXX
mymodule.so`ThirdFunc+0x1e1
35
mymodule.so`FuncXXX
mymodule.so`FourthFunc+0x70
39
dtrace 脚本是:
pid$1:mymodule:FuncXXX:entry{
@a[arg1] = count();
@b[arg2] = count();
@c[ustack()] = count();
}
FuncXXX 有签名:void FuncXXX(void *arg, long int p, int q);
现在,我想聚合变量p
and q
,但是按照调用 FuncXXX 的顺序,例如:
mymodule.so`FuncXXX'
mymodule.so`FirstFunc'+0x23c
8
16384 1
38048 1
38050 1
38051 1
38055 1
-58632623 1
-5180681 1
-4576706 1
-4498881 1
-4472021 1
-4464140 1
mymodule.so`FuncXXX'
mymodule.so`SecondFunc'+0x4bc
9
49599 1
51533 1
51535 1
52149 1
52152 1
-148909 1
-135530 1
-121514 1
-117860 1
-97633 1
and so on
有可能吗?或者我应该独立地追踪FirstFunc
、、SecondFunc
和?但问题是,在所有这些函数中,不能总是被调用。ThirdFunc
FourthFunc
FuncXXX
最好的问候和所有答案。