web-dev-qa-db-fra.com

Outil d'analyse C #/.NET pour trouver des conditions de concurrence/impasses

Existe-t-il un outil qui analyse le code .NET et trouve les conditions de concurrence?

J'ai un peu de code qui a une propriété statique publique qui obtient ou crée un champ statique privé. Il a également une méthode statique publique qui définit ce champ sur null (... oui, je sais! ..)

Comme il n'y a pas de verrous autour de l'une ou l'autre de ces méthodes, il y a fort à parier que les choses vont très mal tourner dans le futur. J'ai besoin d'un outil qui passe en revue de manière récursive des choses appelant l'une de ces méthodes et vérifiant si quelque chose a été généré sur un autre thread.

Je cherche un outil ou peut-être un script SQL nDepend (si cela est possible).

39
Steve Dunn

Vous recherchez probablement l'un de ceux-ci:


NOTE: cette réponse date de 2010. Comme pour toutes les réponses aux recommandations, les recommandations ont tendance à évoluer dans le temps. Il se peut qu’il existe d’autres produits sur le marché à l’heure actuelle, CHESS, qui était un projet de Microsoft Research Labs, est peut-être devenu un produit final ou a été totalement abandonné. Veuillez prendre cette réponse avec un grain de sel et mener de nouvelles recherches pour savoir quels produits conviennent maintenant.

Jinx le fera à l'exécution (pas statiquement) mais cela peut valoir la peine d'être examiné.

4
John Gietzen

Vous voudrez peut-être consulter _ ÉCHECS .

3
Kent Boogaart

J'ai expérimenté sur la façon de suivre facilement ceux-ci. Je me suis efforcé de repérer certaines impasses, en particulier dans des scénarios où de nombreuses instructions de verrouillage différentes sont utilisées.

Mon objectif est de détecter les blocages avant qu'ils ne surviennent, par exemple. si vous avez deux ressources, vous savez que vous devez toujours les utiliser dans le même ordre, sinon un blocage pourrait se produire.

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

... ailleurs dans l'application ...

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

Dans ce cas, j'utilise lockObj1, puis lockObj2 à un endroit et en les utilisant dans l'ordre inverse à un autre endroit. C'est une chose à éviter dans une application. autre comme dans l'exemple, votre application complexe peut avoir plusieurs objets complexes en interaction les uns avec les autres

J'ai téléchargé le code avec les cas de test ici https://github.com/glmnet/LockTracer

3
Guillermo Ruffino

Voir les réponses ici: Quels outils d’analyse statique sont disponibles pour C #?

Certains outils d'analyse statique peuvent détecter les interblocages.

Aussi, essayez FxCop de Microsoft.

2
David d C e Freitas

Avez-vous regardé Red-Gate Ants ? Je ne sais pas s'il fera tout ce dont vous avez besoin, mais c'est un bon produit pour:

  • Identifiez les goulots d'étranglement des performances en quelques minutes
  • Optimiser les performances des applications .NET
  • Effectuez un zoom avant pour ralentir les lignes de code avec des minuteries
  • Profil aspx, ASP.NET, code C # et applications VB.NET
0
Keith Barrows