2010-03-04 10 views
39

NET kodunu analiz eder ve yarış koşullarını bulur bir araç var mı?C#/NET koşullarını bulmak için analiz aracı/deadlocks

Özel bir statik alan oluşturan veya oluşturan statik bir özelliğe sahip biraz kodum var. Ayrıca bu alanı null olarak ayarlayan bir genel statik yöntem vardır (... evet, biliyorum! ..)

Bu yöntemlerden herhangi birinin etrafında kilit olmadığından, bu durumun korkunç bir şekilde gideceği güvenli bir oyundur gelecekte yanlış. Bu yöntemlerden birini arayan ve başka bir iş parçacığında herhangi bir şey ortaya çıkarılmış olup olmadığını tekrar tekrar gözden geçirecek bir araca ihtiyacım var.

Bir araç veya bir nDepend SQL betiği arıyorum (eğer bu mümkün ise).

+8

oooh, gerçekten burada yararlı John, yani etrafında dönen tüm bu reklamların e? Muhtemelen çok reklam verdiyseniz * hangi * reklamı, ya da sadece bir reklam için ürün veya şirket bahsetti. Yoksa sadece "siteye bakarsan ..." mi? –

cevap

19

Muhtemelen bunlardan biri aradığınız:


NOT: Bu cevap 2010'dan itibaren tüm önerileri cevapları gibi olduğu, Öneriler zamanla değişme eğilimindedir. Şu anda başka ürünler de olabilir, bir Microsoft Research Labs projesi olan CHESS, nihai bir ürüne dönüşmüş olabilir veya tamamen hurdaya çıkarılmış olabilir. Lütfen bu cevabı bir tuz tohumu ile alın ve şimdi hangi ürünlerin uygun olduğuna dair yeni araştırmalar yapın.

+0

Teşekkürler Lasse, CHESS duydum ama TypeMock Racer duymamıştım. Gerçekten kodun statik analizini yapan bir araç arıyordum. Kod inceleyen ve belirli bir yöntemin tüm arayanlarını gösteren ve bunları tekrar tekrar inceleyen güzel bir özelliği olan ReSharper 5 kullanıyorum. İhtiyacım olan şey, bir iş parçacığı üzerinde başlatılan bir yöntemi işaretleyecek bir şey. Ben bir upstream arayanlar komut dosyası olduğunu biliyorum, CQL yaklaşımına daha fazla yatırım yapacağım, bu yüzden herhangi bir yöntem bir iplik çağırma çağrısı sonucu olup olmadığını bulmak için bir yolu vardır eminim. –

+0

Bu [satranç çatalı] (https://github.com/LeeSanderson/Chess) güncel ve çalışır durumda gibi görünüyor. – zejuel

3

CHESS ürününü ziyaret etmek isteyebilirsiniz.

4

Jinx bunu çalışma zamanında (statik olarak değil) yapar, ancak bakmaya değer olabilir.

+0

Güzel. Çalışma zamanı analizi, eşzamanlılık sorunlarının statik analizinden çok daha üstündür. Statik analizörler için iyi bir sinyal-gürültü oranı üretmek için çok fazla çalışma zamanı sözleşmesi var. –

+0

Jinx tost gibi görünüyor. – tofutim

+0

Vikipedi: Uğursuzluk, paylaşılan bellek etkileşimlerine odaklanarak, işlemci çekirdeğindeki iş yüklerinin serpiştirilmesini kararlı bir şekilde kontrol eden bir eşzamanlılık hata ayıklayıcısıydı. Bu deterministik yaklaşımı kullanarak, Jinx, bazen Heisenbugs denilen, zor paylaşılan bellek hatalarının meydana gelme sıklığını arttırmayı amaçladı. Jinx artık mevcut değil. Jinx'i geliştiren şirket Corensic, F5 Networks tarafından satın alındı ​​ve Jinx projesi iptal edildi. – tofutim

0

Red-Gate Ants'a baktınız mı? Eğer gereken her şeyi yapacağız eğer emin değilim ama iyi bir üründür: dakika içinde performans darboğazları belirleyin

  • optimize NET uygulama performansı
  • ile kod satırlarını yavaş aşağı Matkap line seviye zamanlamaları
  • Profil aspx, ASP.NET, C# kodu ve VB.NET uygulamaları
2

Bunları kolayca nasıl izleyeceğinizi deniyorum. Bazı kilitlenmeleri, özellikle birçok kilitleme deyiminin kullanıldığı senaryolarda izlemek için çalışıyorum.

Amacım, kilitlenme olaylarını ortaya çıkmadan önce tespit etmektir, örn. İki kaynağınız varsa, bunları her zaman aynı sırayla kullanmanız gerektiğini biliyorsunuz, aksi takdirde kilitlenme olabilir.

( )Başka bir yerde app ... Ben tek bir yerde sonra lockObj2 lockObj1 kullanarak ve başka bir yerde ters sırayla kullanıyorum Bu durumda
lock (lockObj2) 
lock (lockObj1) // <- I expect some "possible deadlock" detection here 
{ 
    // some code 
} 

, bu bir uygulamada önlemek gibi olacak bir şeydir örnekte, sizin karmaşık uygulama birbirini

ile etkileşim birçok karmaşık nesneleri var gibi tabii , kilit ifadeleri burada test durumlarda https://github.com/glmnet/LockTracer ile kod yükledik peş peşe kullanılacak gerekmez

+2

Bu çok ilginç bir fikir. Kodunuzdan esinlenerek benzer bir şey yazdım, her bir kilit için "öncelikli bir numara" atadım ve daha sonra "öncelik sırasına" sahip olduğumda birden fazla kilit aldığımı kontrol ettim. Tabii ki, programımda, kilit alımların siparişi ile ilgili kendi kuralımı ihlal ettiğim ve bu kilitlenme güvenlik açığını gideren bir yer olduğunu hemen anladım. – RenniePet

+1

Bu daha basit, ancak etkili görünüyor! GitHub'da paylaşır mısınız? Eğer yapmadıysan kabul etmeyi unutma. Teşekkürler! –

İlgili konular