今週末、メソッド 1 がメソッド 2 を呼び出し、メソッド 2 がメソッド 3 を呼び出して例外をキャッチし、例外処理内でメソッド 1 が再度呼び出されるという問題に遭遇しました...
M1 -> M2 -> M3 -> M1 ....
問題が発生すると、問題が明確になり、修正が容易になりました。
.NET アプリケーションでこのような問題を検出するツールを知っている人はいますか?
今週末、メソッド 1 がメソッド 2 を呼び出し、メソッド 2 がメソッド 3 を呼び出して例外をキャッチし、例外処理内でメソッド 1 が再度呼び出されるという問題に遭遇しました...
M1 -> M2 -> M3 -> M1 ....
問題が発生すると、問題が明確になり、修正が容易になりました。
.NET アプリケーションでこのような問題を検出するツールを知っている人はいますか?
これを正しく行うには、C# セマンティクスを使用して計算された C# アプリケーションのグローバル コール グラフと、おそらくそれが呼び出すライブラリを含むポイント ツー 分析が必要です。このようなコール グラフを使用すると、その中のサイクルを列挙でき、それらがチェック対象の候補になります。
このような C# のグローバル コール グラフを計算するツールをどこで入手できるかはわかりません。
これは、単純なコード スキャン手法を使用して概算できます。メソッド M ごとに、それに含まれる見かけの呼び出しセットを識別子 I として抽出します。ほとんどの場合、それらはidentifier( このステップの後、M_i -> I になります。これを (非常に保守的な) 基本的な呼び出しとして構築できます。グラフを作成し、推移閉包を計算します. これにより、サイクルを含むおおよその呼び出しグラフが得られ、サイクル分析を実行できます. これにより、名前で渡されたメソッドが大量に渡されるなどのケースが発生しますが、それで十分な場合があります.
Gendarmeは、再帰のいくつかの (最も一般的ですが、基本的な) ケースを検出します。MS FxCop にもいくつかあります (IIRC)。ただし、M1->M2->M3->M1... などのより複雑なケースをカバーするルールは (現在) ありません。
残念ながら、このような .NET の検出を実行できるツールを他に知りません。見つけたものは何でも共有してください:-)