vulnerability seccion race ejemplo critica condicion carrera c# .net multithreading static-analysis ndepend

c# - seccion - race condition vulnerability



Herramienta de anĂ¡lisis C#/.NET para encontrar condiciones de carrera/puntos muertos (6)

¿Existe una herramienta que analiza el 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 tiene un método estático público que establece este campo en nulo (... sí, lo sé! ..)

Como no hay bloqueos en ninguno de estos métodos, es una apuesta segura que las cosas saldrán terriblemente mal en el futuro. Necesito una herramienta que recursivamente vaya a través de las cosas que llaman a cualquiera de estos métodos y vea si se generó algo en otro hilo.

Estoy buscando una herramienta o tal vez un script SQL nDepend (si es posible).


¿Has mirado las hormigas de la puerta roja ? No estoy seguro de si hará todo lo que necesita, pero es un buen producto para:

  • Identificar cuellos de botella de rendimiento en minutos
  • Optimizar el rendimiento de la aplicación .NET
  • Desplácese hasta líneas de código lentas con temporizaciones de nivel de línea
  • Perfil aspx, ASP.NET, código C # y aplicaciones VB.NET

Es posible que desee revisar CHESS .


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

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

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

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

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

En este caso, estoy usando lockObj1 y luego lockObj2 en un lugar y usándolos en el orden opuesto en otro lugar, esto es algo que le gustaría evitar en una aplicación. Por supuesto, las sentencias de bloqueo no necesitan usarse una después otros como en el ejemplo, su aplicación compleja puede tener varios objetos complejos que interactúan entre sí

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


Probablemente estés buscando uno de estos:

NOTA : Esta respuesta es de 2010. Al igual que con todas las recomendaciones, las recomendaciones tienden a cambiar con el tiempo. Puede haber otros productos por ahí ahora, CHESS, que fue un proyecto de Microsoft Research Labs, puede haber evolucionado hasta convertirse en un producto final o haberse desechado por completo. Tome esta respuesta con un grano de sal y realice una nueva investigación sobre qué productos son adecuados ahora.



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