C # /. Инструмент Net Analysis для поиска гоночных условий / тупиков
-
24-09-2019 - |
Вопрос
Есть ли инструмент, который анализирует код .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