Pregunta

¿Existe una herramienta que los análisis de código .NET y encuentra las condiciones de carrera?

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

Como no hay cerraduras en torno a cualquiera de estos métodos, es una apuesta segura que cosas serán a muy mal en el futuro. Necesito una herramienta que va a ir de forma recursiva a través de las cosas que llaman a cualquiera de estos métodos y ver si algo se generó en otro hilo.

Estoy buscando una herramienta o tal vez una secuencia de comandos SQL NDepend (si esto es posible).

¿Fue útil?

Solución

Usted está probablemente en busca de uno de los siguientes:


Nota: : Esta respuesta es a partir de 2010. Al igual que con todas las recomendaciones respuestas, recomendaciones tienden a cambiar con el tiempo. Puede haber otros productos que hay ahora, ajedrez que era un proyecto de Microsoft Research Labs puede haber evolucionado en un producto final o sido desechado por completo. Por favor, tome esta respuesta con un grano de sal y llevar a cabo nuevas investigaciones sobre qué productos son adecuados ahora.

Otros consejos

Jinx va a hacer esto en tiempo de ejecución (no estáticamente ) pero puede ser digno de mirar.

Es posible que desee echa un vistazo a AJEDREZ .

He estado experimentando sobre cómo seguir fácilmente los. He estado trabajando para rastrear algunos puntos muertos, especialmente en escenarios donde se utilizan muchas declaraciones de bloqueo diferentes.

Mi objetivo es detectar los puntos muertos antes de que sucedan, por ejemplo, si tiene dos recursos, usted sabe que tiene que utilizar siempre en el mismo orden, si un punto muerto podría producirse.

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

... en otra parte de la aplicación ...

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

En este caso estoy usando lockObj1 continuación lockObj2 en un lugar y utilizarlos en el orden opuesto en otro lugar, esto es algo que se quiere evitar en una aplicación Por supuesto, no necesitan declaraciones de bloqueo a utilizar una después de la otra, como en el ejemplo, su aplicación compleja puede tener varios objetos complejos que interactúan entre sí

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

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

Algunas herramientas de análisis estático pueden hacer de detección de estancamientos.

Además, trate FxCop de Microsoft.

¿Usted ha mirado Rojo-Puerta de hormigas ? No estoy seguro de si se va a hacer todo lo necesario, pero es un producto de buena a:

  • Identificar los cuellos de botella en cuestión de minutos
  • Optimizar el rendimiento de las aplicaciones .NET
  • Analizar a líneas lentas de código con períodos de tiempo de nivel de línea
  • Perfil aspx, ASP.NET, C # código y aplicaciones VB.NET
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top