抱歉标题过于复杂,但这是我的脚本的 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);
现在,我想聚合变量pand 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和?但问题是,在所有这些函数中,不能总是被调用。ThirdFuncFourthFuncFuncXXX
最好的问候和所有答案。