ग्रहण डिबगर में वापस कदम कैसे रखें?


129

क्या ग्रहण डिबगर में रिवर्स निष्पादन संभव है? वर्तमान परियोजना जिस पर मैं काम कर रहा हूं उसे कुछ भी करने से पहले एक फ़ाइल से डेटा को पढ़ने और आरंभ करने के लिए न्यूनतम 5 सेकंड की आवश्यकता होती है। यदि मैं डीबगर में ओवरस्टेप करता हूं, तो मुझे प्रोग्राम को समाप्त करना होगा और फिर से शुरू करना होगा, और इसमें काफी समय लगता है।

जवाबों:


136

ऊपर से वर्तमान पद्धति को फिर से दर्ज करने के लिए आप ग्रहण की ड्रॉप टू फ्रेम कमांड का उपयोग कर सकते हैं । लेकिन यह किसी भी राज्य में हुए बदलावों को अनियंत्रित नहीं करेगा, इसलिए हो सकता है कि यह उस पद्धति के आधार पर काम न करे जो आप कर रहे हैं।

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

अद्यतन : क्रोनॉन एक वाणिज्यिक उत्पाद प्रदान करता है जिसे वह "जावा के लिए डीवीआर" के रूप में वर्णित करता है, जो ओडीबी के समान ही बहुत कुछ करता दिखाई देता है।


@ मैट मैकहेनरी मैं ODB1.5 का उपयोग करने की कोशिश कर रहा था; एक स्वसंपूर्ण जावा कार्यक्रम के साथ लेकिन मुझे यकीन नहीं है कि इसे काम करने के लिए कैसे प्राप्त किया जाए? क्या आपके पास ODB साइट के अलावा कोई और संसाधन है जो इसे कार्य स्टैंडअलोन और ग्रहण के साथ बनाने के चरणों की व्याख्या कर रहा है?
आयुष्मान

@ आयुष्मान: नहीं, मुझे क्षमा करें, मेरे पास ओडीबी साइट पर जो कुछ भी है उससे आगे साझा करने के लिए कुछ भी नहीं है। मुझे आश्चर्य नहीं होगा अगर यह नए .class फ़ाइल स्वरूपों के साथ काम नहीं करता है, अन्य बातों के अलावा। :(
मैट मैकहेनरी

दिलचस्प जवाब!
कृष्णप्रभाकर

सर्वज्ञ डिबगर वेबसाइट पर दिखाई दिया है।
थोरबजोरन रावन एंडरसन

45

इससे पहले के उत्तरों में जो बताया गया है, उससे परे - यानी डिबग व्यू में एक्लिप्स के फ्रेम की सुविधा , जो स्टैक फ्रेम में पहले डीबगिंग को फिर से शुरू करता है (लेकिन वैश्विक / स्थिर डेटा को वापस नहीं करता है) और ओम्निसेन्ट डिबगर , जो थोड़ा कच्चा है और इतना नहीं है विकसित करना - कुछ ग्रहण आधारित उपकरण हैं जिनका उपयोग (रन) समय में "वापस जाने" के लिए किया जा सकता है:

JIVE कार्यक्रम को रिकॉर्ड करने की क्षमता के साथ एक्लिप्स जावा डीबगर का विस्तार करता है। JIVE परिप्रेक्ष्य कुछ उपयोगी यूएमएल आरेख प्रदान करता है जो प्रोग्राम के चलने के दौरान अपडेट किए जाते हैं। ये आरेख अनुप्रयोग की स्थिति (ऑब्जेक्ट आरेख) और स्टैक ट्रेस (अनुक्रम आरेख) का अवलोकन प्रदान करते हैं। आप याद किए गए ट्रेस को क्वेरी कर सकते हैं और समय में आगे पीछे कर सकते हैं और संबंधित आरेख देख सकते हैं।

गोताखोर केवल विधि कॉल रिकॉर्ड करता है और वास्तव में रिकॉर्ड नहीं करता है जैसे कि JIVE। प्रत्येक विधि कॉल ईवेंट को बाद की पुनर्प्राप्ति और विश्लेषण के लिए संग्रहीत किया जाता है। यह मुख्य रूप से फ़िल्टर को निर्दिष्ट करने के लिए जावा रन और डीबग कॉन्फ़िगरेशन का विस्तार करता है। ट्रेस को रनटाइम पर रोका / फिर से शुरू / फ़िल्टर किया जा सकता है। एक बार रिकॉर्ड करने के बाद, गोताखोर परिप्रेक्ष्य इसे एक इंटरैक्टिव अनुक्रम आरेख में प्रदर्शित कर सकता है।

JIVE और Diver एकेडमिक रिसर्च से जारी ओपन सोर्स प्रोजेक्ट हैं। नवंबर 2012 तक दोनों परियोजनाएं सक्रिय हैं।

क्रोनॉन एक वाणिज्यिक उत्पाद है, लेकिन उनके पास छात्रों और मुक्त स्रोत परियोजनाओं के लिए मुफ्त लाइसेंस हैं। अपनी वेबसाइट पर क्या दावा किया जा रहा है, यह शायद सबसे व्यापक रिकॉर्डर है क्योंकि यह रिकॉर्ड किए गए इतिहास को फिर से आगे बढ़ाने में सक्षम है, अनुमति देता है क्योंकि वे समय यात्रा डिबगिंग कहते हैं। रिकॉर्डिंग के लिए भी ग्रहण की आवश्यकता नहीं है।

ये सभी प्लगइन संसाधनों में काफी लालची हैं इसलिए एक अच्छी कल्पना मशीन का उपयोग करना और उनके फ़िल्टर सुविधा का उपयोग करना सबसे अच्छा है। उन्हें सफलतापूर्वक चलाने के लिए एक निश्चित आवश्यकता है eclipse.ini में ढेर स्थान का विस्तार करना

मेरे मामले में मैंने एक XML पार्सिंग प्रोग्राम को डिबग करने के लिए JIVE और Diver का उपयोग करने की कोशिश की है, लेकिन संसाधनों की कमी के कारण हमेशा के लिए ग्रहण समाप्त हो गया। गोताखोर को लिनक्स 64 बिट पर चलने के लिए मुश्किल हो सकता है , यह इन युक्तियों का उपयोग करके ubuntu 32bit और संभवतः अन्य 32 बिट डिस्ट्रो पर काम करता है । गोताखोर विंडोज पर काम करता है, विंडोज 64 बिट + 64 बिट जेवीएम पर अभी तक बेहतर है अन्यथा आप 32bit खिड़कियों पर 1.3-1.6Gb के अधिकतम ढेर स्थान तक सीमित रहेंगे । JIVE मेरे लिनक्स 64 बिट पर बहुत अच्छा काम करता है, और अन्य प्लेटफार्मों पर ठीक काम करता है।


गोताखोर को बंद कर दिया गया है
विलय

12

हां , एक्लिप्स सीडीटी में ऐतिहासिक डिबगर सुविधा का समर्थन है।

डीबग कॉन्फ़िगरेशन खोलें -> डीबगर -> स्टार्टअप पर रिवर्स डिबगिंग सक्षम करें

की तुलना में आप भी दबा सकते हैं shift+F5या shift+F6जैसे कदम पीछे के लिए F5या F6कदम आगे के लिए।


1
क्या यह विकल्प ग्रहण के सभी संस्करणों में मौजूद है? अगर मुझे यह कहीं भी मिल जाए तो मुझे खतरा है।
EngineerBetter_DJ

1
इसका जीडीबी फीचर sourceware.org/gdb/wiki/ReverseDebug जो इस Bugs.eclipse.org/bugs/show_bug.cgi?id=258284 अनुरोध द्वारा ग्रहण में समर्थित है । वैसे मुझे लगता है कि इसका जवाब 2009 से ही है।
सर्गेई

यह सीडीटी में सुलभ है।
सर्गेई

मैं एक जावा डेवलपर हूं, इसलिए मैं अनुमान लगा रहा हूं कि सीडीटी मेरे लिए ज्यादा उपयोग नहीं होगा?
EngineerBetter_DJ

@Sergei मैं यह एक पुराने स्प्रिंग्स सोर्स संस्करण के साथ 7 SP1 के तहत कर रहा हूँ। रिवर्स डिबगिंग को सक्षम करने के लिए आपको पहले डिबग कॉन्फ़िगरेशन के रूप में डीबग करना होगा-> मुख्य। पृष्ठ के निचले भाग में प्रक्रिया लॉन्चर है। यह "मानक बनाएँ प्रक्रिया लॉन्चर का उपयोग करना" कहेगा और "अन्य का चयन करें ..." के लिए एक हाइपरलिंक होगा। इसे क्लिक करें और सुनिश्चित करें कि "कॉन्फ़िगरेशन विशिष्ट सेटिंग्स का उपयोग करें" की जाँच की जाती है, फिर "GDB (GSF) क्रिएट प्रोसेस लॉन्चर" चुनें और ठीक क्लिक करें। "GDB (GSF) क्रिएट प्रोसेस लॉन्चर का उपयोग करना" अब मुख्य टैब के नीचे प्रदर्शित होगा।
सैमी

5

मैं पक्षपाती हूं, लेकिन क्रोनॉन वही करता है जो आप ढूंढ रहे हैं।

फ़्रेम से फ़्रेम बिल्कुल पीछे नहीं जा रहा है, क्योंकि यदि विधि ने ढेर पर कुछ भी नहीं बदला है तो इसे वापस नहीं किया जाएगा।


1
क्या क्रोनॉन आपको वास्तविक समय में ऐसा करने की अनुमति देता है? मेरी समझ यह है कि आपको पहले क्रोनोन का उपयोग करके एक सत्र रिकॉर्ड करना होगा और फिर आप संभवतः उस सत्र में वापस कदम रख सकते हैं। कि आवेदन को पुनः आरंभ करने के रूप में अच्छा नहीं है? या शायद मुझे कुछ याद आ रहा है ..
रॉम

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

क्या क्रोनक पर्यावरण के माहौल में काम करता है? मेरा ग्रहण स्थानीय पर नहीं है ..
चोई

3

मैं इस फीचर को ग्रहण में भी ढूंढ रहा था। मुझे पता है कि दृश्य स्टूडियो ऐसा कर सकता है। वास्तव में आप वर्तमान लाइन मार्कर को खींच सकते हैं और कोड में कहीं भी वापस छोड़ सकते हैं। यदि चर में परिवर्तन पूर्ववत किया जा सकता है तो मुझे पूरा यकीन नहीं है। लेकिन यह अभी भी बहुत उपयोगी है और बहुत समय बचाता है। मैं बहुत लंबे समय से ग्रहण में इसका इंतजार कर रहा हूं।


1

प्रश्न एक ग्रहण भाषा को निर्दिष्ट नहीं करता है, और कई उत्तर जावा मान लेते हैं।

यदि GDB डिबगर के साथ C ++ और GCC का उपयोग किया जाता है, तो ग्रहण में Run->Move to Lineवह कार्य होता है जो विज़ुअल स्टूडियो सेट नेक्स्ट स्टेटमेंट की तरह कार्य और कार्य करता है । इस स्थिति में, ग्रहण उस क्षमता का उपयोग कर रहा है जो GDB में है।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.