2011-06-30 6 views
5

いくつかの特定の上部レバー機能が直接的または間接的にそれを呼び出すかどうかを調べるために、プロジェクト内のある特定の機能へのコードパスの完全なリストをすばやく検索する方法はありますか?例えば、いくつかの可能な出力がMyLowLevelFunctionTargetFunctionから到達可能であるか否かを決定する:PeganzaによってDelphiプロジェクトのリバースコールツリーを生成するにはどうすればよいですか?

コードパス1

 
ModuleA2.TopLevelFunction 
|--ModuleA1.SomeFunction 
|----Utility.MyLowLevelFunction 

コードパス2

 
ModuleB2.TopLevelFunction 
|--TargetModule.TargetFunction <-- This calls MyLowLevelFunction indirectly 
|----ModuleB1.SomeFunction 
|------Utility.MyLowLevelFunction 
+0

[Delphi Win32アプリケーションでの呼び出しスタックの表示](http://stackoverflow.com/questions/258727/display-the-call-stack-in-a-delphi-win32-application)または[定期的に呼び出しスタック/スタックトレースを記録する方法が必要です](http://stackoverflow.com/questions/2326980/need-a-way-to-periodically-log-the-call-stack-stack-trace-for-すべてのメソッド手続き) –

+1

私は詐欺に間違っている可能性があります。あなたはコードの静的解析を探していますか、または実行時に何かを探していますか? –

+0

私はこれが詐欺だとは思わない。これは逆コール・ツリー・レポートです(コール・スタックではありません)。通常は静的分析によって行われますが、サンプリング・プロファイラーで行うこともできます。 –

答えて

6

パスカルアナライザはReverse call treeを有します報告する。私は顧客であり、とても満足していますが、その特定のタイプのレポートを使用したことはありませんが、その代わりに単純なcross-ref reportが好まれます。

面白いことに、静的解析ツールは、イベントコールバックなどの間接的な呼び出しを見つけることができません。

+0

こんにちはウォーレン、それはあなたのようなパスカルアナライザーのユーザーから答えを得ることはとてもラッキーです:)私はパスカルアナライザーの評価版をダウンロードしました。ただし、評価版には機能「リバースコールツリーレポート」または「相互参照レポート」は含まれていません。私はそれが特定の機能にレポートを制限できるかどうか疑問に思っていましたか?私が尋ねる理由は、生成された "コールツリーレポート"が数百MBのテキストファイルであり、検索が難しいからです。イベントの発言のために〜 – Jim

+1

+1ありがとうございます。 –

+1

Jim:それはほとんどのレポートの基本的な問題です。ほとんどのレポートには必要なものが含まれていないため、Delphiで単純なユーティリティを使用してレポートの出力をフィルタして、必要なものを含めるようにしました。さらに、プロジェクトでランタイムパッケージが使用されている場合は、パッケージを作成しない場合でも、モノリシック(パッケージなし)プロジェクトを構築して、パッケージベースのソリューションのすべてのユニットを単一の分析に含める必要があります。これらの制限の回避策があります。 –