रिवर्स डिबगिंग का उपयोग शायद ही कभी क्यों किया जाता है? [बन्द है]


56

2009 में gdb ने रिवर्स डिबगिंग के लिए समर्थन लागू किया (gdb 7.0 के साथ)। मैंने 2012 तक इसके बारे में कभी नहीं सुना। अब मुझे कुछ प्रकार की डिबगिंग समस्याओं के लिए यह बहुत उपयोगी लगता है। मैंने चाहा कि मैं इसे पहले सुना।

अगर मैं गलत हूं तो मुझे सुधारें लेकिन मेरी धारणा यह है कि तकनीक अभी भी शायद ही कभी इस्तेमाल की जाती है और ज्यादातर लोगों को पता नहीं है कि यह मौजूद है। क्यों?

क्या आप किसी भी प्रोग्रामिंग समुदायों के बारे में जानते हैं, जहां रिवर्स डिबगिंग का उपयोग आम है?

पृष्ठभूमि की जानकारी:

  • Stackoverflow: रिवर्स डिबगिंग कैसे काम करता है?
  • जीडीबी शब्द "रिवर्स डिबगिंग" का उपयोग करता है लेकिन अन्य विक्रेता समान या समान तकनीकों के लिए अन्य शब्दों का उपयोग करते हैं:
    • Microsoft इसे IntelliTrace या "ऐतिहासिक डिबगिंग" कहता है
    • एक जावा रिवर्स डिबगर है जिसे सर्वज्ञ डिबगर कहा जाता है , हालांकि यह संभवतः जावा 6 में काम नहीं करता है
    • अन्य जावा रिवर्स डिबगर्स हैं
    • OCaml का डिबगर (ओमालडबग) इसे टाइम ट्रैवल कहता है

47
उन लोगों के लाभ के लिए जो इसे नहीं जानते हैं, रिवर्स डिबगिंग क्या है ?
मेसन व्हीलर

5
एमएस ने अपने सिस्टम को इन्टेलिट्रेस कहा, जो कि आपको रिवाइज़ डिबगिंग के समान प्रतीत होता है, यह एनवायरमेंट के आधार पर कई नामों की बात हो सकती है, जो इसे कम इस्तेमाल करते हैं।
रायथल

1
बस इसके लायक क्या है: यह वास्तव में आपके द्वारा महसूस किए जाने की तुलना में बहुत पुराना है - Microsoft ने इसे QuickC (1989 या '90 के आसपास, यदि मेमोरी कार्य करता है) में सपोर्ट किया।
जेरी कॉफिन

41
@MasonWheeler, स्पष्ट रूप से रिवर्स डिबगिंग कोड में बग जोड़ने का कार्य है। मैं ओपी के आधार से असहमत हूं कि यह एक असामान्य अभ्यास है।
बेन ली

3
@BenLee, हम उस रिबगिंग को कहते हैं।
OldFart

जवाबों:


26

एक के लिए, सामान्य डिबग मोड की तुलना में रिकॉर्डिंग के साथ डिबग मोड में चलना बहुत महंगा है; यह बहुत अधिक मेमोरी का उपभोग करता है।

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

ध्यान दें कि यह अब कई वर्षों के लिए उपलब्ध है और हॉट-कोड प्रतिस्थापन के साथ हाथ में काम करता है।


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

2
यह rr ( rr-project.org ) तक है। गति का उपयोग करते हुए आरआर का उपयोग करते हुए रिकॉर्डिंग को मुश्किल से धीमा किया जाता है। फिर आप अपने पसंदीदा IDE ( github.com/mozilla/rr/wiki/Using-rr-in-an-IDE ) में रीप्ले, स्टेप इन, रिवाइंड, सेट वॉचर्स कर सकते हैं ... जिस तरह से आप अपना कोड डीबग करते हैं वह कभी नहीं होगा। वही।
ज्येवार्ड

11

जैसा कि पहले ही उल्लेख किया गया है, प्रदर्शन कुंजी है जैसे कि gdb के प्रतिवर्ती डिबगिंग के साथ, गज़िप जैसी चीज़ को चलाने पर मूल रूप से चलने की तुलना में 50,000x की मंदी दिखाई देती है। हालांकि व्यावसायिक विकल्प हैं: मैं पूर्ववत करें। मैं पूर्ववत करता हूं , और हमारा पूर्ववत उत्पाद 2x से कम की मंदी के साथ भी ऐसा ही करता है। अन्य वाणिज्यिक प्रतिवर्ती डिबगर भी उपलब्ध हैं।


1
दिलचस्प है, मैं इसे निश्चित रूप से कोशिश करूंगा। कई लेखों में, यह कहा गया है कि यह गैर-व्यावसायिक उपयोग के लिए स्वतंत्र है लेकिन मुझे आपके मुखपृष्ठ पर इसकी पुष्टि करने वाली कोई जानकारी नहीं मिली। क्या यह अभी भी सच है? अपनी संबद्धता का खुलासा करने के लिए धन्यवाद।
फिलिप क्लेन

2
UndoDB के स्टार्टर और व्यावसायिक संस्करणों के लिए मूल्य क्या हैं? मैं उन्हें UndoDB संस्करण पृष्ठ पर नहीं देखता।
tcrosley

3
आप लोग मोज़िला की तुलना कैसे कर रहे हैं rr?
सिरो सांटिल्ली 27 i i i ''

10

प्रौद्योगिकी विकल्पों और उत्पादों के अवलोकन के लिए, मेरे द्वारा लगभग एक साल पहले लिखी गई ब्लॉग पोस्टों की एक श्रृंखला देखें (और कुछ फ़ॉलो-अप):

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

और तथ्य यह है कि जीडीबी का "सस्ता डिफ़ॉल्ट" लगभग असामान्य रूप से धीमा है और इसमें हर चीज के लिए काफी स्थिरता की समस्याएं हैं लेकिन सबसे महत्वपूर्ण लक्ष्य प्रणाली।


4

TotalView डीबगर के लिए एक बिक्री इंजीनियर के रूप में मेरे अनुभव से, लोगों को पता है कि यह मौजूद है, लेकिन वे यह नहीं सोचते कि यह (स्वीकार्य या नहीं) मंदी के बावजूद काम करता है।

कैम्ब्रिज विश्वविद्यालय ने हाल ही में एक सर्वेक्षण किया, जिसका शीर्षक था "रिवर्स डिबगिंग कॉस्ट्स ग्लोबल इकोनॉमी को $ 41 बिलियन वार्षिक रूप से अपनाना"

और GDB पर वापस आकर, मैंने सुना है (बहुत) कि मंदी "वास्तविक जीवन" अनुप्रयोग पर काफी अनुपयोगी है।

मैं व्यक्तिगत रूप से "हेल्लो वर्ल्ड!" की तुलना में अन्य लोगों के अनुप्रयोगों पर रिवर्स डिबगिंग का उपयोग करके अधिक सुनना पसंद करूंगा।


4
मुझे लगता है कि अध्ययन के बारे में दिखावा करने वाले 'अनडू साफ्टवेयर' स्पैम के बजाय इस अध्ययन को जोड़ना बेहतर होगा।
बुल्लेवेटर

1
अपनी पूर्व नौकरी में, मैंने एक रिवर्स डिबगर ( ghs.com/products/timemachine.html ) बनाने का काम किया । हमने डिबगर का आंतरिक रूप से भारी उपयोग किया, और मैं आपको बता सकता हूं, यह अविश्वसनीय था। बेशक यह वास्तव में बालों की दौड़ की स्थिति पर बहुत अच्छा था, लेकिन यह इससे कहीं अधिक था। जब हर समय रिवर्स डिबगिंग होती है, तो डीबगिंग के बारे में आपकी मानसिकता बदल जाती है। आप कम पुनरावृति करते हैं, और आप अपने कोड का परीक्षण करने के तरीके से कम सावधान हो सकते हैं। आप एक निष्पादन रन को भी बचा सकते हैं और किसी को भेज सकते हैं, इसलिए यह अन्य लोगों के कोड में बग ढूंढने के लिए बहुत अच्छा है।
स्पीडप्लेन

2

मुझे लगता है कि इस "रिवर्स" या "ऐतिहासिक" डिबगिंग पर थोड़ा और विस्तार करना महत्वपूर्ण है। मुझे लगता है कि जटिल घटनाओं और व्यवहार को समझने के लिए, "घटनाओं" को फिर से खेलना जो राज्य को स्पष्ट करते हैं, बिल्कुल महत्वपूर्ण है।

मैं यह व्यक्त करना चाहता हूं कि आप यह सोचकर अकेले नहीं हैं कि यह तकनीक आज इतनी लागू क्यों नहीं है या संबंधित समस्याओं पर शायद ही कभी स्पष्ट रूप से चर्चा की गई है।

तो आइए यहां दो बहुत महत्वपूर्ण अवधारणाओं पर जोर दें:

1. एक प्रोग्रामिंग सिस्टम को समझने के लिए यह राज्य को स्पष्ट करने में सहायक है

2. आगे भी एक प्रोग्रामिंग सिस्टम को समझने के लिए राज्य (घटनाओं) के दृश्यों को दोहराते हुए बहुत मदद मिल सकती है।

यहां कुछ स्रोत दिए गए हैं जो समस्या से निपटते हैं और समस्या के लिए प्रस्तावित या डिज़ाइन किए गए समाधान (जटिल प्रणालियों में स्थिति से निपटने):

टार बिट के कागज, कागज: http://shaffner.us/cs/papers/tarpit.pdf मुख्य विचार: बचने, अलग करने या राज्य को स्पष्ट करने के लिए

-CQRS http://www.cqrs.nu/ यह दो अवधारणाओं का एक संयोजन है: कमांड क्वेरी अलगाव और इवेंट सोर्सिंग। अलग-अलग कार्यान्वयन (जावा, सी #, स्काला) मौजूद हैं। टेट अनुक्रमों की पुनरावृत्ति और एक डोमेन मॉडल का विकास यहां महत्वपूर्ण भाग हैं।

यदि आप वास्तव में ज़ूम आउट करते हैं और बहुत व्यापक तस्वीर देखते हैं तो आप पहले ही देख सकते हैं कि कार्यात्मक प्रोग्रामिंग के "उदय" के साथ लोग पहले से ही ((अन) सचेत रूप से) fp की ओर आकर्षित हैं क्योंकि यह राज्य को स्पष्ट करता है! लेकिन यह केवल एक बिंदु के साथ सौदा है, दूसरे को संबोधित करने के लिए आपको एक और अवधारणा की आवश्यकता है जो कार्यात्मक प्रतिक्रियाशील प्रोग्रामिंग के रूप में वर्णित "शिथिल" हो सकती है।

तो आप सब कुछ अच्छा और अच्छा कह सकते हैं लेकिन वास्तव में CQRS और FRP का उपयोग कौन करता है? मैं कहूंगा (IMO क्योंकि मेरे पास ठोस संख्या नहीं है) वास्तव में बहुत सारी कंपनियां इसकी सिर्फ इतनी हैं कि वे उस कार्य को नहीं जानते हैं जो उनके पास यह शब्दावली है। हो सकता है कि आप थोड़ा सा आसपास घूमें और आप उन उद्यमों से सुनें जो CQRS का उपयोग करते हैं, वहाँ पहले से ही कुछ सफलता की कहानियाँ हैं। FRP भी धीरे-धीरे एक उदाहरण के रूप में बढ़ रहा है जिसे मैं Netflix दे सकता हूं: http://techblog.netflix.com/2013/02/rxjava-netflix-api.html जिसने अभी RX के कार्यान्वयन को जारी किया था जो वास्तव में .NET आधारित है (लेकिन है एक जावास्क्रिप्ट कार्यान्वयन भी)। इसलिए लोग जटिल तकनीकों को समझने और उन्हें और बेहतर बनाने के लिए आज इन तकनीकों का उपयोग पहले से ही कर रहे हैं। यही कारण है कि वे रिवर्स डिबगिंग तकनीकों का उपयोग करते हैं।

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