Question

Y at-il un outil qui analyse le code .NET et trouve des conditions de course?

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 à null (... oui, je sais! ..)

Comme il n'y a pas de verrous autour de l'une de ces méthodes, il est fort à parier que things'll détraquer à l'avenir. Je besoin d'un outil qui va récursive passer par des choses qui appellent une de ces méthodes et voir si quelque chose a été donné naissance à un autre fil.

Je suis à la recherche d'un outil ou peut-être un script SQL NDepend (si cela est possible).

Était-ce utile?

La solution

Vous êtes probablement un de ces:

  • CHESS
  • Typemock Racer

NOTE : Cette réponse est à partir de 2010. Comme toutes les réponses des recommandations, des recommandations ont tendance à changer au fil du temps. Il peut y avoir d'autres produits là-bas maintenant, CHESS qui était un projet Microsoft Research Labs peut avoir évolué en un produit final ou été mis au rebut tout à fait. S'il vous plaît prendre cette réponse avec un grain de sel et d'effectuer de nouvelles recherches sur les produits qui conviennent maintenant.

Autres conseils

Jinx fera à l'exécution (non statique ) mais il peut être intéressant de regarder.

Vous pouvez consulter CHESS .

Je suis expérimenté sur la façon de suivre facilement ceux-ci. Je travaille pour suivre certains blocages, en particulier sur des scénarios où de nombreuses déclarations de verrouillage différents sont utilisés.

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

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

... quelque part ailleurs dans l'application ...

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

Dans ce cas, j'utilise lockObj1 alors lockObj2 en un seul endroit et de les utiliser dans l'ordre inverse dans un autre endroit, c'est quelque chose que vous voulez éviter dans une application Bien sûr, les déclarations de verrouillage ne sont pas nécessaire d'utiliser un après l'autre comme dans l'exemple, votre application complexe peut avoir plusieurs objets complexes qui interagissent les uns avec les autres

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

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

Certains outils d'analyse statique peuvent faire la détection de blocage.

Aussi, essayez FxCop de Microsoft.

Avez-vous regardé Red-Gate Les fourmis ? Je ne sais pas si elle fera tout ce dont vous avez besoin, mais il est un bon produit à:

  • Identifier les goulots d'étranglement dans les minutes
  • Optimiser les performances des applications .NET
  • Drill vers le bas pour ralentir les lignes de code avec des timings de niveau ligne
  • Profil ASPX, applications ASP.NET, le code C # et VB.NET
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top