2012-06-22 14 views
13

संपादित करना: एक नया नया डीबगर लिखने के बिना मैं कुछ तरीकों से संपर्क कर सकता हूं। मैं वर्तमान में मौजूदा जावा डीबगर के शीर्ष पर निर्माण करने के तरीकों की तलाश में हूं। यदि किसी के पास जावा डीबगर की जानकारी को पकड़ने के बारे में कोई विचार है, तो पहले से ही (फ्रेम, चर, कच्चे डेटा इत्यादि के बारे में) है, जो वास्तव में सहायक होगा।एक कस्टम ग्रहण डीबगर

-

मुझे क्या करना कोशिश कर रहा हूँ मैं इस ढांचे/जावा पर बनाया गया एपीआई है है, और मैं ग्रहण प्लगइन डिबगर मेरी ढांचे के लिए अनुकूलित है कि लिखने के लिए करना चाहते हैं। यहां एक साधारण उदाहरण दिया गया है:

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

import java.util.Hashtable; 

public class Scope { 
    private Hashtable<String, Variable> variableList = new Hashtable<String, Variable>(); 

    // constructor 
    public Scope(){ 

    } 

    public void put(String key, Variable v){ 
     variableList.put(key, v); 
    } 

    public Variable get(String key){ 
     return variableList.get(key); 
    } 


} 

public class Variable { 

    private String value; 
    private String name; 

    public Variable(String aName, String aValue){ 
     name = aName; 
     value = aValue; 
    } 

    public String getValue(){ 
     return value; 
    } 

    public String getName(){ 
     return name; 
    } 

    public void setValue(String aValue){ 
     value = aValue; 
    } 
} 

यह स्पष्ट रूप से एक बहुत ही सरल उदाहरण है, लेकिन मैं जहां मैं एक चर खिड़की मिलता है, एक ब्रेकपाइंट सेट कर सकते हैं, और एक "डिबगर" सूची है यह करने के लिए कुछ इसी तरह पूरा करने के लिए चाहते हैं मेरे सक्रिय स्कोप ऑब्जेक्ट्स और वेरिएबल ऑब्जेक्ट्स अंदर। http://www.eclipse.org/articles/Article-Debugger/how-to.html

और अपनी सुंदर घने (और साथ ही अत्यंत पुराना), लेकिन मैं इसे समझने के लिए कुछ समय लग करने की कोशिश करेंगे:

मैंने पढ़ा है और समझने की कोशिश कर रहा है

। मैं सिर्फ यह देखना चाहता था कि इस प्रकार की समस्या से कैसे संपर्क किया जाए, इस बारे में किसी भी उच्च स्तर की सिफारिशें थीं, क्योंकि मेरे पास ग्रहण में प्लगइन विकसित करने या डिबगर्स बनाने में थोड़ा सा अनुभव है।

धन्यवाद!

+0

वह लेख नई भाषाओं के लिए समर्थन जोड़ने के लिए है। जावा क्लास के लिए आपको डीबगर को संशोधित करने की आवश्यकता क्यों है? क्या आप वर्तमान दायरे में ऑब्जेक्ट्स देखने के लिए वेरिएबल विंडो का उपयोग नहीं कर सकते हैं, और सामग्री देखने के लिए विस्तार (जैसे वैरिएबललिस्ट)? – NoBugs

+0

कोई कारण नहीं है कि आप अपने ढांचे को जेएसआर -233 संगत (जावा स्क्रिप्टिंग) न करें? –

उत्तर

3

ग्रहण ईडीसी डिबगर पर काम करने, इसे लिखने एक पूरी डिबगर है की तरह लगता है है आप जो चाहते हैं उतना नहीं।

यह लग रहा है जैसे डिबगर चलाते समय आप वस्तुओं चर है और दायरों में से किसी में रुचि रखते हैं कि के लिए उपयोग होगा।

आप toString() कक्षाओं में खुद को प्रयोग करने या प्रदर्शित करने के लिए विस्तार formatters उपयोग कर सकते हैं आप जो जानकारी चाहते हैं उस पर एक बदलाव। toString() कॉल कॉल में काफी विस्तृत और घोंसला प्राप्त कर सकता है, पूरे सरणी दिखा सकता है, आदि विस्तार प्रारूप भी काफी जटिल हो सकते हैं।

http://www.robertwloch.net/2012/01/eclipse-tips-tricks-detail-formatter/ देखें। यह कई यूआरएल का सबसे अच्छा है (मेरे पास लेखक के साथ कोई संबंध नहीं है)।

एक बार जब आप वेरिएबल और स्कोप ऑब्जेक्ट्स के आउटपुट से खुश होते हैं, तो आपको घड़ी अभिव्यक्तियों को जोड़ने में सक्षम होना चाहिए जो हमेशा उन्हें आपकी अभिव्यक्ति विंडो में दिखाएंगे (इस प्रकार आपको स्टैक में स्थानीय चर पर भरोसा नहीं करना पड़ेगा फ्रेम आप में हो सकता है)।

इससे आपको अपने ढांचे से वेरिएबल्स और स्कोप्स की सूची मिलनी चाहिए जो आप ट्रैक कर रहे हैं ... उम्मीद है कि ऐसा करने के लिए एक संपूर्ण ग्रहण डीबगर प्लगइन लिखने के बिना।

+0

मैं दूसरा जॉन: विस्तार प्रारूपकार वास्तव में उन चीज़ों को प्रतीत करें जो आप खोज रहे हैं। उन्हें लागू करने और परीक्षण करने में आसान हैं, और आपको आवश्यक अधिकांश चीजें प्रदान करनी चाहिए। –

6

कोई आसान काम नहीं है। मुझे लगता है कि यह लेख अभी भी मुख्य संदर्भ है। पुराना, लेकिन पुराना नहीं। इसे पचाने की कोशिश करें, और अधिमानतः इसे काम करने के लिए। इससे पहले, आपको ग्रहण प्लगइन्स विकसित करने का न्यूनतम अनुभव होना चाहिए।

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

ग्रहण पक्ष इंट, प्रोग्रामिंग कुछ ग्रहण कोर वर्गों और अपने स्वयं के कुछ वर्गों, जो बढ़ाने या कुछ ग्रहण वर्गों/इंटरफेस को लागू के बीच एक सहयोग शामिल है:

  • ए 'launchConfigurationType "(आपके प्लगइन.एक्सएमएल में एक्सटेंशन पॉइंट) जो कि जब आप "डीबग एएस -> नई कॉन्फ़िगरेशन" पर क्लिक करते हैं तो एक नई कस्टम कॉन्फ़िगरेशन की आशंका का कारण बनता है; यह कुछ "लॉन्च कॉन्फ़िगरेशनटैबग्रुप" परिभाषा है जो "टैब" संवाद को परिभाषित करता है जो परिभाषित करता है आपके कस्टम लॉन्च कॉन्फ़िगरेशन में (eg) (प्रत्येक टैब में आमतौर पर अपनी कक्षा होगी)।

  • launchConfigurationType आम तौर पर एक LaunchDelegate वर्ग है, जो आपके बूटस्ट्रैप वर्ग की तरह है करने के लिए जुड़ा हुआ है: इसे बनाने और एक चल रहा शुरू करने/उदाहरण डीबगिंग, दोनों ग्रहण तरफ और "दुभाषिया" पर की फ्रॅन्स है (या "रिमोट") पक्ष।

  • ग्रहण पक्ष पर, चल रहा है/डिबगिंग उदाहरण एक IDebugTarget वस्तु और उसके बच्चों (कार्यान्वयन अपने फ्रॅन्स है) का प्रतिनिधित्व करती है; यह लॉन्चडिलेगेट द्वारा बनाया गया है और समय लॉन्च करने पर दूरस्थ रूप से चल रही प्रक्रिया में "संलग्न" है।

  • दूरदराज के पक्ष, दुभाषिया या कार्यक्रम आप वास्तव में डीबग कर रहे हैं, कुछ भी हो सकता है: एक बाइनरी निष्पादन, एक पर्ल स्क्रिप्ट, कुछ अनुप्रयोग एक कुछ साइट में शायद यह भी एक स्थानीय जावा प्रोग्राम चल रहा है (लेकिन, यहां तक ​​कि इस में मामला, यह शायद अपने स्वयं के जेवीएम में चलाएगा, डीबगिंग ग्रहण JVM में नहीं!)। आपकी IDebugTarget ऑब्जेक्ट को "दूरस्थ दुभाषिया" (उदाहरण के लिए, टीसीपी द्वारा) से संवाद करने के लिए पता होना चाहिए और विशिष्ट डीबगर कार्यों (स्थान ब्रेकपॉइंट्स, चरण, रन, चर के लिए पूछना आदि) करना है - लेकिन यहां प्रोटोकॉल आपके ऊपर है, यह पूरी तरह से मनमाना है।

  • क्या मनमाना नहीं है कि चल रहा है ग्रहण डिबगर का उपयोग करेगा अपने कस्टम वर्गों के पदानुक्रम है: इन रूट के रूप में एक IDebugTarget होना चाहिए, और "डिबग मॉडल" (लेख में figure देखें) लागू करना चाहिए। जैसा कि ऊपर कहा, IDebugTarget वस्तु जो समझता है कि कैसे ग्रहण पक्ष और दूरदराज के पक्ष के बीच अनुवाद करने के लिए (this image देख)

+0

तो यदि मैं जावा के आधार पर एक डीबगर लिखने का प्रयास करता हूं, तो लेख में उदाहरण के समान, मेरा "दुभाषिया" (उनके pda.pl दुभाषिया के समान) JVM है? क्या यह सामान्य जावा कोड डीबग किया गया है, जैसा कि, वे इस मॉडल का भी उपयोग करते हैं जहां रिमोट और स्थानीय है और वहां 2 जेवीएम हैं जो डीबगर चला रहे हैं और जो प्रोग्राम को डीबग किया जा रहा है? – KWJ2104

+0

मुझे आपके इरादे का यकीन नहीं है, लेकिन, सामान्य रूप से, मैं हाँ का जवाब दूंगा। और इस तरह एक्लिप्स स्वयं जावा प्रोग्राम को डीबग करता है, यह एक अलग जेवीएम शुरू करता है और टीसीपी/आईपी के माध्यम से इसके साथ जुड़ता है http://wiki.eclipse.org/Debug_FAQ#I_can_run_a_program_but_not_debug_it.3F.3F.3F – leonbloy

0

ठीक है, मैं यहां दूसरा जवाब जोड़ने जा रहा हूं ... मुझे लगता है कि मैं अपने पर्यावरण की स्थिति के साथ पर्याप्त परिचित नहीं हूं कि कस्टम विवरण स्वरूपक चाल क्यों नहीं करेंगे। ज्यादातर मामलों के लिए, मुझे लगता है कि वे आपको वह प्रदान करेंगे जो आप खोज रहे हैं।

लेकिन यदि आप वास्तव में इन वस्तुओं को रखने के लिए एक और दृश्य बनाने में रुचि रखते हैं, तो आप eclipse jdt project देख सकते हैं। यह पूरी तरह से संभव है कि जो एक्सटेंशन पॉइंट प्रदान करता है वह आपको आंतरिक चर और स्टैक-फ्रेम जानकारी तक पहुंच प्रदान करेगा जो आप जोड़ना चाहते हैं, और शायद कुछ यूआई जो आपके काम को आसान बना देंगे।

दूसरे शब्दों में, आपको शायद एक पूरी तरह से नई डीबगर प्लगइन लिखना पड़ेगा, लेकिन शायद एक प्लग-इन जो jdt के साथ मिलकर काम कर सकता है।

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

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