2011-08-30 31 views
6

मैं जावा रनटाइम के दौरान, किसी अन्य विधि द्वारा (कॉल ट्री) नामक सभी विधियों को सूचीबद्ध करने का एक तरीका ढूंढ रहा हूं।किसी विधि का कॉल पेड़: जावा में कवरेज टूल कैसे काम करते हैं? क्या कोई एपीआई है?

मैं एक एपीआई या आउटपुट की तलाश में हूं जो मुझे एक स्क्रिप्ट के साथ डेटा का उपयोग करने की अनुमति दे सकता है।

कोई विचार?

Thx

उत्तर

1

खैर ... यह एक अच्छा सवाल पहली जगह में ... मैं अत्यधिक शक अगर कोई ऐसी उपयोगिता बाजार में उपलब्ध है ... तथापि, वहाँ तरीके यह चारों ओर पाने के लिए कर रहे हैं है। .. ग्रहण और नेटबीन्स जैसे आपके पसंदीदा आईडीई में एक डीबगर टूल का उपयोग करने के समान ...

3

कवरेज और प्रोफाइलिंग टूल ज्यादातर दो तकनीकों को नियोजित करते हैं: विभिन्न थ्रेड या वाद्य यंत्र के लिए जेवीएम समय-समय पर मतदान के लिए जेवीएम जेवीएम प्रासंगिक डेटा का।

जावा भाषा अपने आप में कोई सीधा एपीआई समर्थन नहीं है, लेकिन वहाँ कई उपकरण आप दोहन कर सकते हैं कर रहे हैं:

  1. आप धागा उदासीनता पकड़ कर सकते हैं, jstack या इसी तरह के उपकरण का उपयोग कर, उन्हें toa फ़ाइल सहेजें, उसके विश्लेषण (या विश्लेषण करने के लिए एक स्क्रिप्ट/प्रोग्राम लिखें), यह मतदान है।
  2. अपने आवेदन के बाइटकोड को संशोधित करने के लिए एएसएम या बीसीईएल का उपयोग करें, यह धक्का है लेकिन करना बहुत मुश्किल है।
  3. भार समय बुनाई एजेंट का उपयोग करके AspectJ का उपयोग करें, यह सक्षम करने के लिए यह केवल एक कमांड लाइन पैरामीटर है।

समाधान 3 बहुत आसान, साफ और बहुमुखी है।

रनटाइम पर मुद्रित करने के लिए, जो कुछ भी विधि एक विधि के निष्पादन के परिणाम के रूप में कहा जाता है एक सरल ट्रेसिंग पहलू, करने के लिए कुछ इसी तरह है:

public aspect TraceCalls { 
    pointcut aCall : call(* *(..)); 
    pointcut inside : cflow(execution(public MyClass.MyMethod(..))); 
    before() : aCall() && inside() { 
    System.out.println(thisJoinPoint); 
    } 
} 

जाहिर है, आप और अधिक डेटा का उपयोग कर सकते हैं, प्रिंट उन्हें एक फ़ाइल में, और फॉर्मेट आदि ...

(कृपया ध्यान दें कि मैं इस कोड यहाँ लिखा था, तो यह वाक्यविन्यास त्रुटियों से भरा हो सकता है)

0

यह करने के लिए सही तरीके से एक स्थिर विश्लेषक के साथ है, जो आपके कोड को देखता है और संभावित कॉलर्स के सेट को निर्धारित करता है। यह आपको बताएगा कि किसी भी (रूढ़िवादी) परिस्थिति में किसी विधि को कॉल कर सकता है। हमारे DMS Software Reengineering Toolkit इसके Java Front End के साथ ऐसा करने के लिए कॉन्फ़िगर किया जा सकता है। इसका विश्लेषण करने के लिए अंक-विश्लेषण के लिए समर्थन है; विधि कॉल क्लास-विधि वैक्टर के माध्यम से अनिवार्य रूप से कॉल कर रहे हैं।

एक गरीब व्यक्ति के विकल्प के रूप में, आप एक कॉलिंग टूल का उपयोग कर सकते हैं जो कॉल पेड़ को कैप्चर करता है। यह आपको केवल एक विशेष कार्यक्रम चलाने के द्वारा कॉल किया जाएगा, जैसा कि सभी संभव कॉलिंग संदर्भों के विपरीत है।

हमारे Java Timing Profiler कॉल पेड़ का उत्पादन करेगा।

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