2010-03-04 9 views
39

क्या कोई ऐसा उपकरण है जो .NET कोड का विश्लेषण करता है और दौड़ की स्थिति पाता है?सी #/एनईटी विश्लेषण उपकरण दौड़ की स्थिति/डेडलॉक्स खोजने के लिए

मेरे पास कुछ कोड है जिसमें सार्वजनिक स्थैतिक संपत्ति है जो एक निजी स्थैतिक क्षेत्र प्राप्त या बनाता है। इसमें एक सार्वजनिक स्थैतिक विधि भी है जो इस क्षेत्र को शून्य पर सेट करती है (... हाँ, मुझे पता है! ..)

चूंकि इनमें से किसी भी तरीके के आसपास कोई ताले नहीं हैं, यह एक सुरक्षित शर्त है कि चीजें बहुत ही बदली जाएंगी भविष्य में गलत मुझे एक ऐसे टूल की ज़रूरत है जो उन तरीकों से गुज़र जाएगी जो इन तरीकों में से किसी एक को कॉल करते हैं और देखते हैं कि किसी अन्य थ्रेड पर कुछ भी पैदा हुआ था या नहीं।

मैं एक उपकरण या शायद एक nDepend SQL स्क्रिप्ट (यदि यह संभव है) की तलाश में है।

+8

ओह, वास्तव में जॉन वहां सहायक है, आपका मतलब है उन सभी विज्ञापनों में से जो घूमते हैं? यदि आपने कहा था कि * कौन सा * विज्ञापन, या उस उत्पाद या कंपनी का उल्लेख किया गया है, तो यह शायद बहुत मदद करेगा। या यह है कि "अगर आप वेबसाइट देखते हैं ..."? –

उत्तर

19

आप शायद इनमें से किसी एक के लिए देख रहे:


नोट: इस सवाल का जवाब 2010 से सभी सिफारिशों जवाब के साथ के रूप में है, समय के साथ सिफारिशें बदलती हैं। वहां अन्य उत्पाद भी हो सकते हैं, सीईएसई जो माइक्रोसॉफ्ट रिसर्च लैब्स प्रोजेक्ट था, अंतिम उत्पाद में विकसित हो सकता है या पूरी तरह से स्क्रैप किया जा सकता है। कृपया इस उत्तर को नमक के अनाज के साथ लें और नए शोध का संचालन करें जिसमें उत्पाद अब उपयुक्त हैं।

+0

धन्यवाद लास, मैंने CHESS के बारे में सुना लेकिन टाइपमॉक रेसर नहीं। मैं वास्तव में एक उपकरण की तलाश में था जिसने कोड के स्थिर विश्लेषण किया था। मैं रीशर्पर 5 का उपयोग कर रहा हूं जिसमें एक अच्छी सुविधा है जो कोड का निरीक्षण करती है और किसी विशेष विधि के सभी कॉलर्स दिखाती है और उनके माध्यम से बार-बार ड्रिल करती है। मुझे जो चाहिए वह ऐसा कुछ है जो एक कार्यकर्ता धागे पर तत्काल होने के रूप में एक विधि को ध्वजांकित करेगा। मैं सीक्यूएल दृष्टिकोण पर अधिक निवेश करूँगा, क्योंकि मुझे पता है कि एक अपस्ट्रीम कॉलर्स स्क्रिप्ट है, इसलिए मुझे यकीन है कि किसी भी तरीके से थ्रेड इनवोकेशन कॉल का नतीजा है या नहीं। –

+0

यह [शतरंज का कांटा] (https://github.com/LeeSanderson/Chess) अद्यतित और काम करने लगता है। – zejuel

4

Jinx कार्यावधि में यह कर देगा (नहीं स्थिर), लेकिन इसे देख लायक हो सकता है।

+0

अच्छा। रनटाइम विश्लेषण समवर्ती मुद्दों के स्थिर विश्लेषण से काफी बेहतर है। स्थिर विश्लेषक के लिए एक अच्छा सिग्नल-टू-शोर अनुपात उत्पन्न करने के लिए बहुत अधिक रनटाइम सम्मेलन है। –

+0

लगता है कि जिनक्स टोस्ट है। – tofutim

+0

विकिपीडिया: जिनक्स एक समवर्ती डीबगर था जो प्रोसेसर कोर में वर्कलोड के अंतःक्रियात्मक रूप से नियंत्रित करता है, साझा स्मृति इंटरैक्शन पर ध्यान केंद्रित करता है। इस निर्धारिक दृष्टिकोण का उपयोग करते हुए, जिनक्स का लक्ष्य छिपी हुई साझा स्मृति बग की घटना की आवृत्ति को बढ़ाने के लिए किया जाता था, जिसे कभी-कभी हेइज़ेनबग कहा जाता था। Jinx अब उपलब्ध नहीं है। जोनक्स विकसित करने वाली कंपनी कोरेंसिक, एफ 5 नेटवर्क द्वारा खरीदी गई थी और जिनक्स परियोजना रद्द कर दी गई थी। – tofutim

0

आप Red-Gate Ants को देखा है? मुझे यकीन है कि अगर यह सब कुछ आप की जरूरत है क्या करेंगे नहीं कर रहा हूँ, लेकिन यह एक अच्छा उत्पाद है:

  • मिनट के भीतर निष्पादन की कमियाँ पहचानें
  • अनुकूलन .NET अनुप्रयोग प्रदर्शन
  • साथ कोड की लाइनें धीमा करने के लिए नीचे ड्रिल लाइन-लेवल समय
  • प्रोफ़ाइल aspx, ASP.NET, सी # कोड, और VB.NET अनुप्रयोगों
2

यहाँ उत्तर देखें: What static analysis tools are available for C#?

कुछ स्थिर विश्लेषण उपकरण डेडलॉक पहचान कर सकते हैं।

इसके अलावा, माइक्रोसॉफ्ट से FxCop आज़माएं।

2

मैं कितनी आसानी से उन पर नज़र रखने के लिए प्रयोग कर रहे हैं। मैं कुछ डेडलॉक्स को ट्रैक करने के लिए काम कर रहा हूं, विशेष रूप से उन परिदृश्यों पर जहां कई अलग-अलग लॉक स्टेटमेंट्स का उपयोग किया जाता है।

मेरा लक्ष्य इससे पहले कि वे ऐसा गतिरोध पता लगाने के लिए, उदाहरण के लिए है आप दो संसाधनों है, तो आप जानते हैं कि आप हमेशा उसी क्रम में उन्हें इस्तेमाल करने के लिए है, अन्यथा एक गतिरोध पराक्रम होते हैं।

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 साथ कोड अपलोड कर दिया है की तरह के उदाहरण में, अपने जटिल आवेदन कई जटिल एक दूसरे को

साथ बातचीत के दौरान वस्तुओं हो सकता है एक के बाद एक में इस्तेमाल किया जा करने की जरूरत नहीं

+2

यह एक बहुत ही रोचक विचार है। आपके कोड से प्रेरित मैंने कुछ समान लिखा, प्रत्येक लॉक को "प्राथमिकता संख्या" असाइन किया, और तब जांच कर रहा था कि जब भी मुझे एकाधिक ताले मिलते हैं तो मुझे उन्हें "प्राथमिकता आदेश" में मिला। निश्चित रूप से, यह तुरंत पता चला कि मेरे कार्यक्रम में एक जगह थी जहां मैंने लॉक अधिग्रहण के आदेश के बारे में अपना खुद का नियम तोड़ दिया था, और तय किया कि मेरी डेडलॉक भेद्यता तय हो गई है। – RenniePet

+1

यह आसान, अभी तक प्रभावी लग रहा है! क्या आप इसे गिटहब पर साझा कर सकते हैं? यदि आपने नहीं किया तो ऊपर उठना न भूलें। धन्यवाद! –

संबंधित मुद्दे