コールスタック図の作成
私たちは最近、コードに入る必要のある大きなプロジェクトに投げ込まれました(duh)。
ブレークポイントなどを理解するためにさまざまなメソッドを使用しています。ただし、1つのメソッドはアプリケーションの呼び出しツリーを作成することであることがわかりました。これを行うための最も簡単で最速の方法は何ですか?
コードで?プラグイン?手動で?
プロジェクトはC#Windowsアプリケーションです。
静的アナライザーNDependを使用すると、以下のような静的メソッド呼び出しグラフを取得できます。免責事項: 私はツールの開発者の 1 人です。
そのためには、CQLinq コード クエリの結果をグラフにエクスポートするだけです。
このようなコード クエリは、以下に示す右クリック メニューのおかげで、任意のメソッドに対して実際に生成できます。
新しい仕事を始めるときはいつでも(私は請負業者であることが多いです)、リポジトリ内のすべてのソースファイルを2〜3日読んで、各クラスに対するメモを単純なテキストファイルに保存します。それは非常に骨の折れる作業ですが、プロジェクトがどのように組み合わされているかを非常によく理解し、何かを行うクラスを見つける必要があるときに信頼できるマップを持っていることを意味します。
Altought私はプロジェクトを開始するときにUML/ダイアグラムが大好きです。個人的には、既存のコードを調べるときにUML/ダイアグラムがまったく役に立たないと思います。
あなたの質問に対する直接的な回答ではありませんが、NDependはコードベースの 100 フィート ビューを取得するための優れたツールであり、クラス (および他の多くの機能) 間の関係を掘り下げることができます。
編集: MicrosoftのCLRプロファイラーは、実行中のアプリケーションの呼び出しツリーを表示できると思います。それでも不十分な場合は、カスタムソリューションを開始したい場合に備えて、以下に投稿したリンクを残しておきます。
これが正しい方向を示すかもしれないCodeProjectの記事です:
ここで提供されるダウンロードは、C#コードでユーザー関数呼び出しツリーを一覧表示するための単純なユーティリティ用のVisual Studio 2008 C#プロジェクトです。
このコールツリーリスターは、私のスタイルのコーディングでは問題なく機能するようですが、他のスタイルのコーディングでは信頼できない可能性があります。ここでは、2つの考えを持って提供されています。1つは、一部のプログラマーはそれがそのまま役立つと感じるかもしれません。第二に、C#解析に精通している人が、正確なC#パーサーを組み込んでアップグレードし、コーディングスタイルに関係なく信頼できる改善されたユーティリティを見つけてくれるとありがたいです。
ソースコードはダウンロードできます。おそらく、これをカスタムソリューションの開始点として使用できます。
スタック レコードではありませんが、実行してから数回一時停止し、そのたびにコール スタックをキャプチャすると、ほとんどの時間を占めるコール構造の非常に良い全体像が得られます。ただし、非常に高速に発生することの呼び出し構造はわかりません。