2014-07-07 8 views
18

मैं एक साधारण जावा एप्लिकेशन प्रोफाइल करने के लिए VisualVM चला रहा हूं। जब मैं प्रोफाइलिंग फलक में एक विधि पर डबल-क्लिक करता हूं (इस पर अधिक जानकारी प्राप्त करने की उम्मीद करता हूं), तो यह कहता है "कक्षा के लिए कोई स्रोत नहीं मिला ...."। मुझे पता है कि स्रोत कहां है। मैं VisualVM को कहां देखना चाहूंगा?मैं विजुअलवम कैसे कहूं कि मेरा स्रोत कोड कहां ढूंढें?

+0

बस एक अनुमान का उपयोग कर की गणना होती है, लेकिन क्या आप classpath पर .class फ़ाइलों के बगल में जावा फ़ाइलें डाल तो क्या होगा? या यदि वे एक जार, बंडल स्रोत और कक्षाओं में हैं तो वे एक-दूसरे के बगल में हैं। –

+0

मैंने .java फ़ाइलों को .class फ़ाइलों के साथ मेरी मुख्य .jar फ़ाइल में जोड़ने का प्रयास किया, लेकिन इससे मदद नहीं मिली। –

उत्तर

5

मैंने VisualVM प्रक्रिया का एक स्टैक डंप लिया, जबकि यह त्रुटि संवाद प्रदर्शित कर रहा था, और ऐसा लगता है कि समस्या विधि में org.netbeans.modules.profiler.api.GoToSource कक्षा में निहित है।

यह विधि GoToSourceProvider सेवा प्रदाता इंटरफ़ेस के किसी भी पंजीकृत कार्यान्वयन का उपयोग करके स्रोत को लोड करने का प्रयास करती है, और यदि कोई भी प्रश्न में स्रोत कोड प्रदर्शित करने में सक्षम नहीं होता है तो त्रुटि संदेश प्रदर्शित करता है।

मेरा अनुमान है कि VisualVM के वर्तमान, डिफ़ॉल्ट संस्करण में GoToSourceProviders पंजीकृत नहीं है, और इसलिए हमेशा स्रोत कोड देखने में विफल रहेगा।

पैकेज नाम से यह प्रतीत होता है कि GoToSourceProvider प्रोफाइलर मॉड्यूल के लिए एक एसपीआई है, लेकिन मैं इस एसपीआई को कार्यान्वित करने के तरीके पर कोई दस्तावेज नहीं ढूंढ पाया, और यह VisualVM का हिस्सा नहीं प्रतीत होता विस्तार बिंदु

+0

यह एक दयालु बात है कि हम जावा कोड को पूरी तरह से VisualVM में प्रोफाइल नहीं कर सकते !!! – ady

+1

इस तरह की आवाज नेटबींस से प्रोफाइलर को अकेले स्टैंड बनाने के लिए एक पर्यवेक्षण है। –

0

नेटबीन्स आईडीई (मैं 8.0.2 का उपयोग कर रहा हूं) में VisualVM को वर्चुअल रूप से लागू किया गया है। आप बस Profile->Project Profile पर क्लिक करें। क्लिक करने पर आपको स्रोत कोड दिखा रहा है वहां काम कर रहा है। लेकिन दुर्भाग्य से कोई और विस्तृत जानकारी नहीं है कि कोड की रेखाएं अधिकतर समय लेती हैं।

कि मैं कोड को संशोधित करेगा और मैं मैन्युअल

long beg = System.nanoTime() 
lineISuspect 
sum += System.nanoTime() - beg; 
संबंधित मुद्दे