2009-04-06 19 views
68

मुझे एक छोटी परियोजना मिली है, जो ग्रहण डीबगर में चलाए जाने पर हमेशा फ़ाइलइनपुटस्ट्रीम.क्लास लाइन 106 में रुकती प्रतीत होती है, जहां फाइलें खोली जाती हैं। कोई ब्रेकपॉइंट्स सेट नहीं हैं, लेकिन एक्लिप्स ठीक तरह से व्यवहार करता है जैसे कि मेरे पास ब्रेकपॉइंट है। अगर मैं सभी ब्रेकपॉइंट्स साफ़ करता हूं, तो यह अभी भी होता है।मेरी ग्रहण परियोजना में प्रेत डीबगर ब्रेकपॉइंट्स क्यों हैं?

मेरे पास एक ही ग्रहण कार्यक्षेत्र में दूसरी बड़ी परियोजना है जो इस समस्या से ग्रस्त नहीं है।

मैंने अपनी पुरानी लिनक्स मशीन से छोटी परियोजना को बंद कर दिया, जहां मैंने इसे यूरोपा ग्रहण में विकसित किया और यह समस्या मेरी नई विंडोज मशीन पर थी, जहां मुझे गैनीमेडे ग्रहण में समस्या दिखाई दे रही है। समस्या ऑपरेटिंग सिस्टम और ग्रहण संस्करणों में बनी हुई है, फिर भी स्पष्ट रूप से परियोजनाओं में नहीं। मुझे यह नहीं मिला! मैंने इस प्रोजेक्ट की निर्देशिका में प्रत्येक फाइल के माध्यम से grepped और कुछ भी नहीं मिला जो फ़ाइल हो सकता है किसी भी तरह से FileInputStream में ग्रहण रोकने के लिए निर्देश।

और जानकारी: स्पष्ट ब्रेकपॉइंट वास्तव में FileInputStream की लाइन 106 के लिए नहीं है; यह FileNotFoundException के लिए एक अपवाद ब्रेकपॉइंट प्रतीत होता है, जिसे फ़ाइलइनपुटस्ट्रीम में उस पंक्ति से बुलाए गए मूल कोड से फेंक दिया जा रहा है। लेकिन फिर से, मुझे लगता है कि कोई ब्रेकपॉइंट बिल्कुल नहीं दिखता है। अपवाद ब्रेकपॉइंट्स कहीं और परिभाषित हैं?

+0

मैं के बारे में है कि एक अपने आप को सोच रहा था, मैं अक्सर अपने आप को breakpoints पर रोक पाते हैं कि मैं मैंने शपथ ली थी कि मैंने हटा दिया था। – Uri

+0

ने – VonC

उत्तर

110

आप संयुक्त राष्ट्र का चयन

Window > Preferences > Java > Debug : Suspend execution on uncaught exceptions 

करने की कोशिश किया? (mentioned in this thread, उदाहरण के लिए के रूप में)

alt text

क्यों ग्रहण कि जिस तरह से काम करता है?

यह goes back to 2002, जब ब्रेकपॉइंट ऑब्जेक्ट पदानुक्रम को तोड़ दिया गया है।

वर्ष एपीआई के साथ, एक ब्रेकपाइंट सेट करने के लिए, एक ग्राहक की आवश्यकता जावा मॉडल वस्तुओं - जैसे IType, IField, आदि
नई एपीआई के साथ , कि सभी के लिए आवश्यक है के रूप में डिबग मॉडल प्रकार है नाम, फ़ील्ड नाम इत्यादि।

यह क्लाइंट को ब्रेकपॉइंट्स सेट करने की अनुमति देता है जब जावा मॉडल ऑब्जेक्ट उपलब्ध नहीं होते हैं।
ग्राहक अब ब्रेकपॉइंट को जोड़ने के लिए संसाधन निर्दिष्ट करते हैं (इससे पहले कि हम इसे संबंधित जावा मॉडल संसाधनों में बाध्य करते हैं)।

ब्रेकपॉइंट्स अब भी "छिपा" हो सकता है। यही है, उन्हें ब्रेकपॉइंट मैनेजर के साथ पंजीकृत नहीं होना चाहिए।
ब्रेकपॉइंट्स को भी चुनिंदा रूप से जारी रखा जा सकता है (मार्करों को केवल मार्कर प्रकार के सभी/किसी भी को जारी रखने की अनुमति नहीं दी जाती है)।
यह डीबग मॉडल को अधिक लचीला बनाता है, और ग्राहकों को अधिक बिल्डिंग ब्लॉक देता है।

यह भी हमारी जावा डिबग कार्यान्वयन के कुछ हिस्से को सरल बनाया गया है - उदाहरण के लिए, सुविधा "suspend on any uncaught exception", बस एक ब्रेकपाइंट प्रकार "java.lang.Throwable" नाम के बजाय एक विशिष्ट IType एक विशेष परियोजना में के लिए सेट करता है।
ब्रेकपॉइंट ब्रेकपॉइंट मैनेजर के साथ पंजीकृत नहीं है (यानी।छिपा) - यह केवल एक ग्राहक द्वारा ज्ञात और उपयोग किया जाता है।
एक और उदाहरण "run to line breakpoint" है। IJavaRunToLineBreakpoint हटा दिया गया है, क्योंकि इसकी विशेष कार्यक्षमता अब आवश्यक नहीं है। अब, जावा डीबग ui बस एक "लाइन ब्रेकपॉइंट" बनाता है जो छुपा हुआ है, न ही निरंतर है, और इसकी हिट गिनती है। यह ग्राहकों को बिल्डिंग ब्लॉक प्रदान करने का एक उदाहरण है।

+0

से अनुरोध किया है कि इस "किसी भी अपरिचित अपवाद पर निलंबित" सुविधा के बारे में कुछ स्पष्टीकरण जोड़ा है! धन्यवाद! अब ग्रहण इस तरह से क्यों काम करता है? – skiphoppy

+0

यह उन अनचेक रनटाइम अपवादों का पता लगाने में सहायता करता है जो आपके कोड से बेकार हैं। – VonC

+0

मुझे एक ही व्यवहार का सामना करना पड़ रहा है और मैंने "यूह्नॉट अपवादों पर निष्पादन को निलंबित" अनचेक नहीं किया है। मैं विकल्प को चेक करना छोड़ना पसंद करता हूं लेकिन मुझे यह जानने में दिलचस्पी होगी कि कौन सा अपवाद हुआ, मैं इसे कैसे जान सकता हूं? – HAL9000

34

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

विंडो> शो देखें> अन्य ...

डीबग> ब्रेकप्वाइंट

फिर सही किसी भी ब्रेकप्वाइंट क्लिक करें और चुनें

"सभी निकालें" दुर्भाग्यवश आपको अपने सभी वैध ब्रेकपॉइंट्स को रीसेट करना होगा, लेकिन यह मेरे लिए काम करता है और आगे बढ़ने से बहुत अधिक परेशानी और निराशा को रोका है।

कुछ चित्रों मार्गदर्शन करने के लिए दूसरों:

Add Breakpoints window to Eclipse

Remove All (Breakpoints, right click)

+0

धन्यवाद, मार्क। इससे मदद मिली। लेकिन मैंने उन सभी को नहीं हटाया, बस एक ऐसा पाया जो एक परेशानी का कारण बन गया। – morphium

+0

धन्यवाद मार्क! मेरे लिए काम किया, लेकिन उपरोक्त लड़के की तरह, मैंने बस जिसकी मुझे आवश्यकता थी उसे हटा दिया। निराशाजनक है कि एक पंजीकृत ब्रेकपॉइंट साइडबार पर संपादक दृश्य में भी दिखाई नहीं देता है। वास्तव में वे उस मामले में "प्रेत" अंक हैं। – The111

+0

मुझे संभवतः आपके कामकाज से संबंधित समस्या का समाधान मिला। अगली बार ऐसा होने पर मेरा समाधान नीचे आज़माएं। – HAL9000

4

उन अन्य समाधान उपयोगी नहीं मिल रहा है, जो के लिए, मैं मेरी समस्या के लिए अपने व्यक्तिगत समाधान मिल गया। मैं एक .jar लाइब्रेरी के साथ काम करता हूं जो वर्कस्पेस में एक और प्रोजेक्ट बनाने के द्वारा उत्पन्न होता है। यदि मैंने लाइब्रेरी प्रोजेक्ट में .java में ब्रेकपॉइंट सेट किया है, तो अंतिम प्रोजेक्ट डिबग करने पर ब्रेकपॉइंट ट्रिगर किया जाएगा। हालांकि जब डीबगर निष्पादन को रोकता है .class फ़ाइल दिखायी जाती है जिसमें इसका अपना ब्रेकपॉइंट है और इसलिए .java फ़ाइल में सेट ब्रेकपॉइंट यहां नहीं दिखाया गया है!

समाधान: , ब्रेकपाइंट आप जावा फाइल में ब्रेकप्वाइंट हटाने के लिए दूर करने के लिए पुस्तकालय परियोजना में आदेश में।

0

उन लोगों के लिए जिन्हें पिछले उत्तरों से समाधान नहीं मिला, वे मेरी समस्या का हल करने का प्रयास कर सकते हैं। मुझे लगता है कि एचएएल 9000 समस्या/समाधान

यदि आपके पास एक ही नाम (दो अलग-अलग परियोजनाओं में) के दो वर्ग हैं, तो दूसरे पर ब्रेकपॉइंट्स, दूसरे पर भी लागू होते हैं। दोनों "ब्रेकपॉइंट्स" विंडो में दिखाए जाते हैं।

समाधान: आप वर्ग से ब्रेकपाइंट निकालते हैं - एक ही नाम के साथ - आप उपयोग नहीं कर रहे हैं कि यह वर्ग आप डीबग कर रहे हैं से ब्रेकपाइंट निकाल देता है।

1

मैं एक ऐसे मुद्दे में भाग गया जहां एक स्रोत फ़ाइल में ब्रेकपॉइंट्स के लिए लगातार मार्कर थे जो अस्तित्व में नहीं थे। मैंने प्रोजेक्ट की सफाई करने, पूर्ण निर्माण करने, ग्रहण को पुनरारंभ करने की कोशिश की - कुछ भी काम नहीं किया।

मैं ग्रहण मेटाडाटा के माध्यम से खुदाई कर रहा था, और परियोजनाओं .markers फ़ाइल मिली। अंततः उस फाइल को हटाने से समस्या ठीक हो गई।

किसी और के लिए इस समस्या को रखने के लिए, अपनी कार्यक्षेत्र निर्देशिका खोलें, फिर .metadata/.plugins/org.eclipse.core.resources/.projects/अपनी प्रोजेक्ट पर नेविगेट करें, फिर फ़ाइल का नाम बदलें/हटाएं। मार्कर।

उदाहरण के लिए, यदि आपके कार्यक्षेत्र फ़ोल्डर ~/कार्यक्षेत्र है, और अपनी परियोजना फू नाम दिया गया है, तुम कर सकते हो:

$ mv ~/workspace/.metadata/.plugins/org.eclipse.core.resources/.projects/Foo/.markers ~/safe.Foo.markers 
संबंधित मुद्दे