Pergunta

Existe uma ferramenta que analisa o código .NET e encontra condições de corrida?

Eu tenho um pouco de código que possui uma propriedade estática pública que recebe ou cria um campo estático privado. Ele também possui um método estático público que define esse campo como nulo (... sim, eu sei! ..)

Como não há mechas em torno de nenhum desses métodos, é uma aposta segura que as coisas vão dar errado no futuro. Preciso de uma ferramenta que passe recursivamente por coisas que chamam qualquer um desses métodos e vejam se alguma coisa foi gerada em outro tópico.

Estou procurando uma ferramenta ou talvez um script SQL NDepend (se isso for possível).

Foi útil?

Solução

Você provavelmente está procurando um desses:


NOTA: Esta resposta é de 2010. Como em todas as respostas de recomendações, as recomendações tendem a mudar com o tempo. Pode haver outros produtos por aí agora, o xadrez, que era um projeto da Microsoft Research Labs, pode ter evoluído para um produto final ou foi descartado por completo. Por favor, pegue esta resposta com um grão de sal e conduza novas pesquisas nas quais os produtos são adequados agora.

Outras dicas

Jinx fará isso em tempo de execução (não estaticamente), mas pode valer a pena olhar.

Você pode querer conferir XADREZ.

Eu tenho experimentado como rastreá -los facilmente. Eu tenho trabalhado para rastrear alguns impasse, especialmente em cenários em que muitas declarações de bloqueio diferentes são usadas.

Meu objetivo é detectar impasse antes que eles aconteçam, por exemplo poderia ocorrer.

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

... em outro lugar no aplicativo ...

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

Nesse caso, estou usando o LockObj1 e depois o Lockobj2 em um só lugar e usando -os na ordem oposta em outro lugar, isso é algo que você deseja evitar em uma aplicação, é claro, as declarações de bloqueio não precisam ser usadas após o Outros como no exemplo, seu aplicativo complexo pode ter vários objetos complexos interagindo entre si

Eu enviei o código com os casos de teste aquihttps://github.com/glmnet/locktracer

Veja as respostas aqui: Quais ferramentas de análise estática estão disponíveis para C#?

Algumas ferramentas de análise estática podem fazer detecção de impasse.

Tente também Fxcop da Microsoft.

Você já olhou Formigas de portas vermelhas? Não tenho certeza se isso fará tudo o que você precisa, mas é um bom produto para:

  • Identifique gargalos de desempenho em poucos minutos
  • Otimize o desempenho do aplicativo .NET
  • Faça uma perfuração para linhas lentas de código com horários em nível de linha
  • Profile ASPX, ASP.NET, C# Código e VB.NET Aplicativos
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top