2010-08-28 4 views
47

मुझे वास्तव में जेवीएम की रिमोट डीबगिंग सुविधाएं पसंद हैं। लेकिन मुझे आश्चर्य है कि यह आंतरिक रूप से कैसे काम करता है।जावा रिमोट डीबगिंग, यह तकनीकी रूप से कैसे काम करता है?

मेरे धारणा: यह/एक JVM सुविधा जहां चल प्रक्रिया डाउनलोड कर रहा है के माध्यम से किया जाता है संलग्न रिमोट डीबगर (आईडीई) की तरह से स्रोत-कोड का उपयोग कर यह वर्तमान ढेर का पता लगाने की लाइन जानता है और फिर कूद कर सकते हैं संबंधित आईडीई ब्रेकपॉइंट पर। स्टैक-ट्रेस और अनुप्रयोग स्थिति के आत्मनिरीक्षण का संचार तब सॉकेट या साझा-स्मृति (रिमोट डीबगर की सेटिंग) के माध्यम से किया जाता है।

क्या कोई उस पर दिलचस्प लिंक/संसाधन है?

उत्तर

35

जेवीएम की डीबगिंग विशेषताएं Java Platform Debugger Architecture (JPDA) के माध्यम से प्रदान की जाती हैं।

JPDA ही निम्न से बना है:

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

आरेख JPDA architecture structure में सूचीबद्ध एक अच्छा प्रारंभिक बिंदु है। देखने के लिए अतिरिक्त स्थान guides listed in the JPDA page होगा।

+0

धन्यवाद, एक सार्थक पढ़ा गया था। बस ब्याज के लिए मैं कार्रवाई में डीबगिंग को सीधे देखने के लिए jdi.jar लाइब्रेरी का उपयोग करने की कोशिश करूंगा। –

+2

@manuel, यदि आपके पास समय और धैर्य है, तो JSwat (http://code.google.com/p/jswat/) के स्रोत कोड पर नज़र डालें। यह नेटबीन्स मंच के शीर्ष पर बनाया गया है, और जेपीडीए के संबंध में एक फ्रंट एंड एप्लिकेशन के रूप में कार्य करता है। मुझे यह स्वीकार करना होगा कि मैंने खुद को स्रोतों में नहीं देखा है। –

9

जावा के डिबगिंग आर्किटेक्चर को जेपीडीए कहा जाता है। आप शायद जेपीडीए documentation पढ़ना चाहते हैं। विशेष रूप से, Walk-through section स्टैक पर मूल्य प्राप्त करने के लिए जेडीआई के साथ एक आईडीई इंटरफेसिंग का एक उदाहरण देता है।

7

ग्रहण डीबगिंग एजेंटों के रूप में संदर्भित होता है।

जेवीएम, जो अनुपालन ".class" स्रोत चलाता है, में एक सुविधा है जो बाहरी पुस्तकालयों (जावा या सी ++ में लिखी गई) को रनटाइम के दौरान जेवीएम में इंजेक्शन देने की अनुमति देती है। इन बाहरी पुस्तकालयों को एजेंटों के रूप में जाना जाता है और उनके पास .class फ़ाइलों की सामग्री को संशोधित करने की क्षमता है। इन एजेंटों कि एक नियमित जावा कोड JVM के अंदर चल रहा है और वे आदि JRebel जैसे कुछ उपकरणों की रूपरेखा, चल स्रोत कोड इंजेक्शन लगाने की तरह रोचक सामग्री करते हैं और संशोधित करने के लिए इस्तेमाल किया जा सकता के भीतर से सुलभ नहीं है JVM की कार्यक्षमता के लिए उपयोग (इस्तेमाल किया है कोड के गर्म प्रतिस्थापन के लिए) अपने जादू को प्राप्त करने के लिए कार्यक्षमता के इस टुकड़े का उपयोग करता है।

और एक JVM करने के लिए एक एजेंट लिब पारित करने के लिए, आप शुरू तर्क के माध्यम से ऐसा करते हैं, का उपयोग कर -

agentlib:libname[=options] 

हम वास्तव में JVM चल बिलाव के लिए एक एजेंट लिब नामित jdwp गुजर रहे थे। जेडीडब्ल्यूपी जेडीडब्लूपी (जावा डीबग वायर प्रोटोकॉल) का एक जेवीएम विशिष्ट, वैकल्पिक कार्यान्वयन है जिसका प्रयोग डीबगर और चल रहे जेवीएम के बीच संचार को परिभाषित करने के लिए किया जाता है। यदि वर्तमान या तो jdwp.so के रूप में JVM के एक देशी पुस्तकालय के रूप में आपूर्ति की या jdwp.dll

तो यह क्या क्या करता है यह, कार्यान्वयन है? सरल शब्दों में, jdwp एजेंट हम पारित मूल रूप से एक आवेदन पत्र और एक डीबगर (जो या तो दूरस्थ या स्थानीय स्थित हो सकता है) चल रहा JVM उदाहरण के बीच एक कड़ी होने का कार्य में लगे हुए है।चूंकि यह एक एजेंट लाइब्रेरी है, इसलिए इसमें चलने वाले कोड को अवरुद्ध करने, JVM और डीबगर के बीच एक पुल बनाने की क्षमता है, और JVM पर लागू डीबगर की कार्यक्षमता है। चूंकि जेवीएम आर्किटेक्चर में, डीबगिंग कार्यक्षमता JVM के भीतर ही नहीं मिलती है लेकिन इसे बाहरी उपकरणों (जिसे उचित रूप से डीबगर्स के रूप में जाना जाता है) में समझा जाता है, ये टूल या तो स्थानीय मशीन पर रहते हैं जो JVM को डीबग किया जा रहा है या चलाया जा रहा है बाहरी मशीन से हूँ। यह डी-युग्मित, मॉड्यूलर आर्किटेक्चर है जो हमें रिमोट मशीन पर चलने वाला जेवीएम रखने और जेडीडब्ल्यूपी का उपयोग करने की इजाजत देता है, रिमोट डीबगर इसके साथ संवाद करने में सक्षम हो सकता है।

इसी तरह ग्रहण डीबगर कम में काम करता है।

+1

वास्तव में मैं जेवीएम एजेंट मूलभूत सिद्धांतों को समझता हूं। लेकिन स्पष्ट नहीं है जब डेवलपर ग्रहण में कुछ पंक्ति पर ब्रेकपॉइंट डालता है, यह कैसे काम करता है? रिमोट रिमोट एप्लिकेशन को डीबग करने के लिए कोड को स्थानीय बॉक्स में संकलित करने की आवश्यकता है? –

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