2011-03-21 12 views
10

मैं एक समस्या में इस सप्ताह के अंत जहां विधि 1 विधि 2 कौन सी विधि 3 जो अपवाद पकड़ा कहा जाता है दौड़ा रहा हूँ, और अपवाद हैंडलिंग के भीतर विधि 1 फिर से बुलाया गया था ...मैं एक प्रत्यावर्तन विश्लेषण उपकरण

एम 1 -> एम 2 -> एम 3 -> एम 1 ....

समस्या होने के बाद समस्या ठीक हो गई और ठीक करने में आसान हो गया।

क्या किसी को भी .NET एप्लिकेशन में ऐसी समस्याओं का पता लगाने के लिए किसी टूल के बारे में पता है?

+0

अनबाउंड रिकर्सन का पता लगाने के लिए संकलन समय (ए.के.ए. स्थिर) विश्लेषण करना बहुत मुश्किल है। मुझे नहीं लगता कि .NET स्पेस में कोई भी उपकरण है जो आपको इससे मदद कर सकता है। – Steven

+0

@Steven - हाँ, मैं किसी उपकरण के बारे में कुछ भी नहीं ढूंढ पाया ... निकटतम मैं आया था इसके बारे में एक एसीएम लेख था ... जब मैंने प्रश्न पोस्ट किया तो मैंने अपनी उंगलियों को पार किया। – Sam

+0

आप मनमाने ढंग से रिकर्सन का पता लगाना चाहते हैं? या विशेष रूप से, एक अपवाद हैंडलर के माध्यम से होता है कि रिकर्सन? –

उत्तर

2

Gendarme रिकर्सन के कुछ (सबसे आम, लेकिन बुनियादी) मामलों को पकड़ लेंगे। एमएस एफएक्सकॉप में कुछ भी हैं (आईआईआरसी)। हालांकि न तो अधिक जटिल मामलों को कवर करने के लिए नियम (वर्तमान में) हैं: एम 1-> एम 2-> एम 3-> एम 1 ...

दुख की बात है कि मुझे किसी भी अन्य उपकरण से अवगत नहीं है जो .NET के लिए ऐसा पता लगा सकता है। कृपया जो भी आप पाते हैं उसे साझा करें :-)

+0

NDepend। Http://stackoverflow.com/questions/1683091/how-to-find-recursion-in-your-app – reinierpost

5

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

मुझे नहीं पता कि आपको एक उपकरण कहाँ मिलेगा जो शेल्फ के बाहर सी # के लिए ऐसे वैश्विक कॉल ग्राफ़ की गणना करेगा।

आप सरल कोड स्कैनिंग तकनीकों का उपयोग करके इसका अनुमान लगा सकते हैं। प्रत्येक विधि एम के लिए, पहचानकर्ताओं के रूप में शामिल कॉल के एपैरेंट सेट को निकालें I अधिकांशतः वे पहचानकर्ता () के रूप में दिखाई देने वाले वाक्यविन्यास के रूप में दिखाई देंगे। इस चरण के बाद आपके पास M_i -> I. है। आप इसे एक (बाहरी रूढ़िवादी) के रूप में बना सकते हैं। मूल कॉल ग्राफ़, और उसके बाद ट्रांजिटिव क्लोजर की गणना करें। इसके साथ, आपके पास चक्र के साथ अनुमानित कॉल ग्राफ़ है, और आप अपना चक्र विश्लेषण कर सकते हैं। यह बड़े पैमाने पर विधियों और अन्य मामलों से गुजरता है, लेकिन यह काफी अच्छा हो सकता है

+0

देखें कि मैं जिस उत्तर की तलाश में था (एक उपकरण) लेकिन कार्य की जटिलता का एक अच्छा पुन: प्रारंभ (जो बताता है, थोड़ा, ऐसे उपकरणों की कमी)। धन्यवाद – poupou

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