C # /. Инструмент Net Analysis для поиска гоночных условий / тупиков

StackOverflow https://stackoverflow.com/questions/2379610

Вопрос

Есть ли инструмент, который анализирует код .NET и находит условия расы?

У меня есть немного кода, который имеет общественное статическое свойство, которое получает или создает частное статическое поле. Он также имеет общественный статический метод, который устанавливает это поле на NULL (... Да, я знаю! ..)

Поскольку в любом из этих методов нет блокировков, это безопасная ставка, что все будет ужасно неправильно в будущем. Мне нужен инструмент, который рекурсивно проходит через вещи, которые вызывают любой из этих методов, и посмотрим, что что-то породило на другом потоке.

Я ищу инструмент или, возможно, скрипт NDEPEND SQL (если это возможно).

Это было полезно?

Решение

Вы, вероятно, ищете один из них:


ПРИМЕЧАНИЕ: Этот ответ с 2010 года. Как и во всех рекомендациях ответов, рекомендации, как правило, меняются со временем. Там могут быть другие продукты в настоящее время, шахматы, которые были проектом Microsoft Research Labs, возможно, превратились в конечный продукт или вообще отказались. Пожалуйста, возьмите этот ответ с зерном соли и проводят новые исследования, в которые сейчас подходят продукты.

Другие советы

Jinx. сделает это во время выполнения (не статично), но это возможно, стоит смотреть.

Возможно, вы захотите проверить Шахматы.

Я экспериментировал о том, как легко отслеживать тех. Я работал над отслеживанием тупиков, специально на сценариях, где используются много разных замков.

Моя цель - обнаруживать тупики, прежде чем они произойдут, например, если у вас есть два ресурса, вы знаете, что вы должны всегда использовать их в том же порядке, в противном случае тупик мощь происходить.

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

... где-то еще в приложении ...

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

В этом случае я использую LOCKOBJ1, затем LOCKOBJ2 в одном месте и использую их в противоположном порядке в другом месте, это то, что вы хотели избежать в приложении, конечно, операторы блокировки не должны использоваться один после Другими, как в примере, ваше сложное приложение может иметь несколько сложных объектов, взаимодействующих друг с другом

Я загрузил код с тестовыми случаями здесьhttps://github.com/glmnet/lockTracer.

Смотрите ответы здесь: Какие инструменты статического анализа доступны для C #?

Некоторые инструменты статического анализа могут делать обнаружение тупика.

Также попробуй Fxcop. от Microsoft.

Вы смотрели на Red-Gate Mults? Я не уверен, что это сделает все, что вам нужно, но это хороший продукт:

  • Определите узкие места производительности в течение нескольких минут
  • Оптимизировать производительность приложения .NET
  • Унимись к медленным линиям кода с временным уровнями уровня
  • Профиль ASPX, ASP.NET, C # код и приложения VB.NET
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top