Herramienta de análisis C#/. NET para encontrar condiciones de carrera/deadlocks


¿Hay alguna herramienta que analice el código. NET y encuentre las condiciones de la carrera?

Tengo un bit de código que tiene una propiedad estática pública que obtiene o crea un campo estático privado. También tiene un método estático público que establece este campo en null (...sí, lo sé!..)

Como no hay bloqueos alrededor de ninguno de estos métodos, es una apuesta segura que las cosas irán terriblemente mal en el futuro. Necesito una herramienta que recursivamente ir a través de cosas que llaman a cualquiera de estos métodos y ver si cualquier cosa fue generada en otro hilo.

Estoy buscando una herramienta o quizás un script SQL NDepend (si esto es posible).

Author: Steve Dunn, 2010-03-04

6 answers

Probablemente esté buscando uno de estos:


NOTA: Esta respuesta es de 2010. Al igual que con todas las respuestas de recomendaciones, las recomendaciones tienden a cambiar con el tiempo. Puede haber otros productos por ahí ahora, AJEDREZ que era un proyecto de Microsoft Research Labs puede haber evolucionado en un producto final o ha sido desechado por completo. Por favor, tome esta respuesta con un grano de sal y llevar a cabo una nueva investigación en qué productos son adecuados ahora.

 19
Author: Lasse Vågsæther Karlsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-11 06:47:54

Jinx hará esto en tiempo de ejecución (no estáticamente), pero puede valer la pena mirar.

 4
Author: John Gietzen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-24 02:47:08

Es posible que desee comprobar hacia fuera AJEDREZ.

 3
Author: Kent Boogaart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-28 01:00:43

Vea las respuestas aquí: ¿Qué herramientas de análisis estático están disponibles para C#?

Algunas herramientas de análisis estático pueden detectar bloqueos.

También, prueba FxCop de Microsoft.

 2
Author: David d C e Freitas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:32:11

He estado experimentando sobre cómo rastrearlos fácilmente. He estado trabajando para rastrear algunos bloqueos, especialmente en escenarios donde se usan muchas declaraciones de bloqueo diferentes.

Mi objetivo es detectar puntos muertos antes de que ocurran, por ejemplo, si tienes dos recursos, sabes que tienes que usarlos siempre en el mismo orden, de lo contrario podría ocurrir un punto muerto .

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

... en otro lugar de la aplicación ...

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

En este caso estoy usando lockObj1 entonces lockObj2 en un lugar y usarlos en el orden opuesto en otro lugar, esto es algo que te gustaría evitar en una aplicación Por supuesto, las sentencias lock no necesitan usarse una tras otra como en el ejemplo, su aplicación compleja puede tener varios objetos complejos interactuando entre sí

He subido el código con los casos de prueba aquí https://github.com/glmnet/LockTracer

 2
Author: Guillermo Ruffino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-27 12:55:55

¿Has mirado a Hormigas de Puerta Roja? No estoy seguro de si va a hacer todo lo necesario, pero es un buen producto para:

  • Identificar cuellos de botella de rendimiento en cuestión de minutos
  • Optimizar el rendimiento de las aplicaciones. NET
  • Profundiza para ralentizar las líneas de código con tiempos de nivel de línea
  • Perfil aspx, ASP.NET, código C#, y VB.NET solicitudes
 0
Author: Keith Barrows,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-04 16:28:02