かなり複雑なアルゴリズム内で不要な冗長呼び出しを追跡するのに苦労しています。
(私の一部の) 私のアルゴリズムは、キャッシュされていない比較的高価な関数の (いくつかのサブルーチンでの) 冗長な呼び出しによって深刻に遅くなっているようです。これを確認するために、Dtrace を利用して、コール スタック ツリーの特定のブランチ内で単一の関数の複数の呼び出しを検出したいと思います。
dtrace に次のことを依頼できるようにしたいと思います。
特定の関数内のコール スタック ツリーを検索する (ここ
"foo();"
では、添付の画像を参照) 重複する関数呼び出し ("c();"
など)それぞれの呼び出し回数でログに記録します (ここでは 3x
"c();"
)
また、可能であれば
- 各発生のコール スタックをログに記録します (
"foo()/a()/c()"
、"foo()/a()/b()/c()"
、"foo()/a()/b()/d()/c()"
)。
これは可能ですか?はいの場合、どのように考えていますか?
前もって感謝します!
注: 私のコードは実際には Objective-C ですが、サンプル コードでは C を使用しましたが、この種のことは言語に依存しないはずです。少なくとも一般的なアプローチ/アイデア。