Domanda

C'è uno strumento che analizza .NET code e trova condizioni di gara?

Ho un po ' di codice che ha un pubblico di proprietà statica che si ottiene o che crea un campo statico privato.Essa ha anche un metodo statico pubblico che imposta questo campo è null (...sì, lo so!..)

Come non ci sono serrature intorno a uno di questi metodi, è una scommessa sicura che le cose ti vanno male in futuro.Ho bisogno di uno strumento che, in modo ricorsivo, passare attraverso le cose che chiamare uno di questi metodi e vedere se qualcosa è stato generato in un altro thread.

Sto cercando uno strumento o, forse, un nDepend script SQL (se questo è possibile).

È stato utile?

Soluzione

Probabilmente stai cercando una di queste:


NOTA:Questa risposta è dal 2010.Come con tutte le raccomandazioni risposte, raccomandazioni tendono a cambiare nel tempo.Ci possono essere altri prodotti là fuori ora, SCACCHI che era un Laboratori di Ricerca del progetto si è evoluto in un prodotto finale o stato demolito completamente.Si prega di prendere questa risposta con un grano di sale e di condurre una nuova ricerca in cui i prodotti sono adatti ad ora.

Altri suggerimenti

Jinx farà questo in fase di esecuzione (non staticamente ), ma può essere la pena di guardare.

Si potrebbe voler controllare SCACCHI .

Ho avuto modo di sperimentare su come rintracciare facilmente quelli. Ho lavorato per tracciare alcune situazioni di stallo, in particolare su scenari in cui vengono utilizzati molte dichiarazioni di blocco differenti.

Il mio obiettivo è quello di rilevare situazioni di stallo prima che accadano, per esempio se si dispone di due risorse, sai che devi usarli per sempre nello stesso ordine, in caso contrario una situazione di stallo potrebbe verificarsi.

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

... da qualche altra parte in app ...

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

In questo caso sto usando lockObj1 poi lockObj2 in un luogo e utilizzando nell'ordine opposto in un altro luogo, questo è qualcosa che ti piacerà di evitare in un'applicazione Naturalmente, le dichiarazioni di blocco non devono essere utilizzati uno dopo l'altro come nell'esempio, l'applicazione complesso potrebbe avere diversi oggetti complessi che interagiscono tra loro

Ho caricato il codice con i casi di test qui https://github.com/glmnet/LockTracer

Si vedano le risposte qui: strumenti Quali statico di analisi sono disponibili per C # ?

Alcuni strumenti di analisi statica possono fare rilevamento dei deadlock.

Inoltre, prova a FxCop di Microsoft.

Hai guardato Red-Gate Ants ? Non sono sicuro se lo farà tutto il necessario, ma è un buon prodotto per:

  • Identificare i colli di bottiglia in pochi minuti
  • Ottimizzare le prestazioni delle applicazioni .NET
  • Drill-down alle linee lente di codice con temporizzazioni a livello di linea
  • Profilo aspx, ASP.NET, C # codice, e le applicazioni VB.NET
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top