2008-10-21 18 views
5

मैं दो प्रश्न हैं:डिबगिंग पीछे की ओर

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

  2. क्या कोई डीबगर/आईडीई का प्रावधान है कि जब "स्मृति" के लिए स्मृति पता/चर चिह्नित किया जाता है, तो यह प्रदर्शित करना चाहिए कि कौन सी फ़ंक्शन , और किस कोड ने उस स्मृति को बदल दिया (लिखना), हर बार जब यह बदल जाता/लिखा जाता है?

-AD

+4

यदि डिबगिंग बग को हटाने की प्रक्रिया है [या कम से कम उन्हें पहचानने] की प्रक्रिया है, तो पीछे की ओर डीबग करना उन्हें इन्हें डालने की प्रक्रिया होनी चाहिए ... या, दूसरे शब्दों में, प्रोग्रामिंग! – Mikeage

उत्तर

0

मेरा मानना ​​है कि OCaml के नवीनतम संस्करण को इस है। यह काफी नया फीड जैसा लगता है, लेकिन आईआईआरसी यह विजुअल स्टूडियो के भविष्य के संस्करण की इच्छा सूची पर है।

वीएस में एक सुविधा मैंने उपयोग नहीं किया है, वस्तुओं को ट्रैक कर सकते हैं (ऑब्जेक्ट आईडी या कुछ बना सकते हैं)।

2

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

विजुअल स्टूडियो data breakpoints का समर्थन करता है जो किसी भी स्मृति स्थान को भी लिखा जाता है जब डीबगर में तोड़ देगा।

यह पता लगाने के लिए बहुत उपयोगी हो सकता है कि दूषित होने वाले स्मृति के टुकड़े पर क्या चल रहा है। हालांकि, डेटा ब्रेकपॉइंट्स की संख्या पर सीमाएं हैं जिन्हें आप सेट कर सकते हैं, क्योंकि उन्हें प्रोसेसर से हार्डवेयर रजिस्टर समर्थन का उपयोग करके कार्यान्वित किया जाता है।

3

# 2 के लिए, आप watchpoints पढ़ सकते हैं, जो अन्य डीबगर्स के बीच जीडीबी में उपलब्ध हैं।

वॉचपॉइंट ब्रेकपॉइंट्स के समान हैं। हालांकि, कोड के कार्यों या रेखाओं के लिए सेट नहीं हैं । वॉचपॉइंट्स चर पर सेट हैं। जब वे चर पढ़ते या लिखे जाते हैं, तो घड़ी बिंदु ट्रिगर और प्रोग्राम निष्पादन बंद हो जाता है।

1

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

for (i = 0; i < list.size(); i++) { 
    foo = list[i]; 
} 

आप एक सशर्त ब्रेकप्वाइंट जब रोकने के लिए i == 17, या जब foo == null सेट कर सकते हैं।

1

ऐसे डिबगर्स बनाने में हैं।आप निम्नलिखित Google Talk - Debugging Backwards in Time

+0

यह वह बात है जिसे मैं सोच रहा था। यह शोध बहुत आशाजनक है। – elviejo79

1

पहली समस्या के लिए: ddd/gdb में backtrace है जो आपको दिखाता है कि यह वास्तव में उस बिंदु पर कैसे पहुंचता है। इसके अलावा एक coredump मदद कर सकता है।

एक संभावित दुष्प्रभावों के बारे में एक दिलचस्प लेख this one

10

ऐसा लगता है कि आप की तरह एक भयानक बहुत कुछ 2010

दृश्य स्टूडियो की एक प्रति वे लगभग ठीक है कि तुम क्या कर रहे हैं कार्यान्वित कर रहे हैं हड़पने के लिए चाहते हैं जाएगा # 1 में वर्णन - विजुअल स्टूडियो टीम सिस्टम 2010 में Channel 9 पर नए "ऐतिहासिक डीबगर" के बारे में एक स्क्रीनकास्ट है।

"दृश्य स्टूडियो ऐतिहासिक डीबगर:

इस स्थित here (this one is for the April 2008 CTP of codename 'Rosario')

मैं Maor दाऊद द्वारा एक ब्लॉग प्रविष्टि (here) से नए ऐतिहासिक डीबगर की इस परिभाषा पाया है प्रविष्टि में इसके बारे में थोड़ा अधिक है कैप्चर और रिकॉर्ड्स करता है कि एप्लिकेशन चल रहा है, तो क्या होता है। जब कोई त्रुटि होती है, तो आप ऐतिहासिक डीबगर द्वारा दर्ज की गई जानकारी की जांच करके रूट कारण को तुरंत पा सकते हैं। किसी भी समय डिबगिंग के दौरान, आप समय पर पिछड़े और आगे जा सकते हैं यह निर्धारित करने के लिए कि एक त्रुटि कहाँ हुई। "

यहां एक और video walkthrough भी है!

संपादित करें: मैं विजुअल स्टूडियो 2010 के सबसे (1) recent CTP ड्रॉप (31/10 - अक्टूबर 08) का मूल्यांकन करना शुरू कर रहा हूं और उनके पास लागू ऐतिहासिक डीबगर का प्रारंभिक संस्करण प्रतीत होता है। यह जांचने लायक हो सकता है।

(1) [http://www.microsoft.com/downloads/details.aspx?FamilyId=922B4655-93D0-4476-BDA4-94CF5F8D4814&displaylang=en]

4

मुझे लगता है कि आप को पाने के लिए कोशिश कर रहे हैं एक Omniscient Debugger या Tangible Program Histories (1999 से !!)।

बेशक ये अधिक शोध पत्र/कार्यान्वयन हैं लेकिन ऐसा लगता है कि ये अवधारणा आखिरकार मुख्यधारा के कंपाइलरों में आ रही हैं।

2

आप वीएमवेयर से Replay Debugging पर देखना चाह सकते हैं।

लिंक से:

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

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

0

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

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

मुझे पता है कि आपने जो पूछा है वह नहीं है, लेकिन फिलहाल, यह सब हमारे पास है ... मुझे विश्वास है कि ऐसी तकनीक शायद जल्द ही उपलब्ध होगी, लेकिन इस पल के लिए मुझे लगता है कि यह "शोध" चरण में है ।

1

सितंबर 200 9 से, जीएनयू डीबगर (जीडीबी) में डीबग को रिवर्स करने की संभावना है, यानी प्रोग्राम को डीबग चरण बनाने और रिवर्स में जारी रखने की क्षमता है। ऐसा लगता है कि आपने जो पूछा है।

विवरण के लिए यहां देखें: http://sourceware.org/gdb/news/reversible.html

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