41

.NET コードを分析して競合状態を検出するツールはありますか?

プライベート静的フィールドを取得または作成するパブリック静的プロパティを持つコードが少しあります。また、このフィールドを null に設定する public static メソッドもあります (...はい、わかっています!..)。

これらの方法のいずれにもロックがないため、将来、事態がひどく悪化することは間違いありません。これらのメソッドのいずれかを呼び出すものを再帰的に調べて、別のスレッドで何かが生成されたかどうかを確認するツールが必要です。

ツールまたは nDepend SQL スクリプト (可能であれば) を探しています。

4

6 に答える 6

20

あなたはおそらくこれらのいずれかを探しています:


: この回答は 2010 年のものです。すべての推奨事項の回答と同様に、推奨事項は時間の経過とともに変化する傾向があります。現在、他の製品が出回っている可能性があります。Microsoft Research Labs のプロジェクトであった CHESS は、最終製品に進化したか、完全に破棄された可能性があります。この回答を鵜呑みにして、現在どの製品が適しているかについて新たな調査を行ってください。

于 2010-03-04T13:38:24.513 に答える
4

Jinxはこれを (静的ではなく) 実行時に行いますが、検討する価値があるかもしれません。

于 2010-03-04T13:39:48.510 に答える
4

それらを簡単に追跡する方法を実験してきました。私は、特に多くの異なるロック ステートメントが使用されるシナリオで、いくつかのデッドロックを追跡するために取り組んできました。

私の目標は、デッドロックが発生する前に検出することです。たとえば、リソースが 2 つある場合、それらを常に同じ順序で使用する必要があることがわかっています。そうしないと、デッドロック発生する可能性があります。

lock (lockObj1) 
lock (lockObj2) 
{ 
    // some code
} 

...アプリ内の別の場所...

lock (lockObj2) 
lock (lockObj1) // <- I expect some "possible deadlock" detection here 
{ 
    // some code
} 

この場合、ある場所では lockObj1 を使用してから lockObj2 を使用し、別の場所ではそれらを逆の順序で使用しています。これは、アプリケーションでは避けたいことです。例のように、複雑なアプリケーションには、相互に対話する複数の複雑なオブジェクトが含まれる場合があります。

ここにテストケースを含むコードをアップロードしました https://github.com/glmnet/LockTracer

于 2015-04-27T12:55:55.077 に答える
3

CHESSをチェックしてみてください。

于 2010-03-04T13:38:05.480 に答える
2

ここで回答を参照してください: C# で使用できる静的分析ツールは何ですか?

一部の静的分析ツールは、デッドロック検出を行うことができます。

また、 Microsoft のFxCopを試してください。

于 2011-07-15T10:52:20.720 に答える
0

Red-Gate Antsを見たことがありますか? 必要なすべての機能を備えているかどうかはわかりませんが、次のことを行うのに適した製品です。

  • パフォーマンスのボトルネックを数分で特定
  • .NET アプリケーションのパフォーマンスを最適化する
  • 行レベルのタイミングで遅いコード行にドリルダウン
  • aspx、ASP.NET、C# コード、および VB.NET アプリケーションのプロファイリング
于 2010-03-04T16:28:02.957 に答える