我很难在一个相当复杂的算法中追踪不必要的冗余调用。
看起来(我的一些)我的算法被非缓存且相对昂贵的函数的冗余调用(在几个子例程中)严重减慢了。为了确认这一点,我想利用 Dtrace 来检测调用堆栈树的给定分支内单个函数的多个调用。
我希望能够要求 dtrace:
在给定函数(此处,见附图)中搜索调用堆栈树以
"foo();"
查找重复的函数调用("c();"
例如)用他们各自的通话次数记录他们(这里:3x for
"c();"
)
如果可能的话
- 记录每次出现的调用堆栈 (
"foo()/a()/c()"
,"foo()/a()/b()/c()"
,"foo()/a()/b()/d()/c()"
)。
这可能吗?如果是的话,知道怎么做吗?
提前致谢!
注意:尽管我的代码实际上是在 Objective-C 中,但我在示例代码中使用了 C,但这种事情应该与语言无关,不是吗?至少一般的方法/想法。