2009-12-18 18 views
12

क्या किसी भी परिस्थिति में, किसी प्रोग्राम की स्थिति को पुनर्स्थापित करने के लिए यह संभव है कि कोर फ़ाइल की पीढ़ी के दौरान क्या हो?कोर फ़ाइल से प्रोग्राम स्थिति को पुनर्स्थापित करना

कारण मैं पूछता हूं कि जीडीबी की कार्यक्षमताओं को निष्पादित करने की क्षमता का लाभ उठाने के लिए और आगे आपको एक चल रहे उदाहरण की आवश्यकता है। निश्चित रूप से राज्य के साथ कोर की सामग्री होने के लिए एक ही निष्पादन योग्य की नकली प्रक्रिया का उत्पादन करना संभव होना चाहिए?

यदि ऐसी स्थिति के लिए क्या विकल्प नहीं हैं जो मुझे पहले स्थान पर करना चाहते हैं? इस मामले में कोर के बैक-ट्रेस ने लाइब्रेरी फ़ंक्शन का नेतृत्व किया और मैं इनपुट को इस फ़ंक्शन कॉल में दोहराना चाहता था लेकिन इनपुट में से एक जटिल ऑब्जेक्ट था जिसे आसानी से चलने में फ़ंक्शन कॉल के साथ स्ट्रिंग में क्रमबद्ध किया जा सकता था उदाहरण लेकिन कोर डंप में ऐसा नहीं है।

उत्तर

7

सैद्धांतिक रूप से वही करना संभव है जो आप चाहते हैं, लेकिन (AFAICT) GDB (अभी तक) में इसके लिए कोई समर्थन नहीं है।

आपकी सर्वश्रेष्ठ शर्त GDB-7.0 का उपयोग करना है और सीरियलाइज़ेशन फ़ंक्शन को फिर से कार्यान्वित करने के लिए इसकी एम्बेडेड पायथन स्क्रीप्टिंग का उपयोग करना है।

+0

धन्यवाद - यह नहीं पता कि पाइथन स्क्रिप्टिंग जो मैं चाहता हूं वह करने में सक्षम होगी लेकिन यह सब बहुत उपयोगी लगता है। – cyborg

2

यही कोर फ़ाइल पहले से ही है? आप मूल निष्पादन और कोर फाइल के साथ gdb लोड तो

gdb myprogram.exe -c mycorefile 

तो यह है जहाँ यह दुर्घटनाग्रस्त हो गया पर बात करने के लिए जाना होगा। आप चर को देखने के लिए सभी सामान्य निरीक्षण कार्यक्षमता का उपयोग कर सकते हैं, स्टैक ट्रेस देखें और इसी तरह।

या क्या मैंने आपके प्रश्न को गलत समझा है?

+3

जब आप मूल फ़ाइल डिबग कर रहे हों तो आप gdb में फ़ंक्शंस निष्पादित नहीं कर सकते हैं। तो कहें कि मेरे पास कोर फ़ाइल है, एक जटिल क्लास फू के चर का पता लगाएं और मैं एक अच्छा सरल स्ट्रिंग प्रस्तुति प्राप्त करने के लिए Foo.getSerialization() निष्पादित करना चाहता हूं क्योंकि मैं नहीं चल रहा क्योंकि यह चल रही प्रक्रिया नहीं है। तो प्रश्न यह है कि कोई कोर से चलने की प्रक्रिया में जा सकता है। – cyborg

+1

आप gdb सुंदर प्रिंट मान बनाने के लिए कुछ कोड लिख सकते हैं। यहां पाइथन एपीआई देखें (http://sourceware.org/gdb/current/onlinedocs/gdb/Python-API.html#Python-API)। –

+0

@ जेफफोस्टर मुझे लगता है कि यह वास्तव में मदद नहीं कर रहा है, अगर आप किसी भी लाइव फ़ंक्शन को कॉल करना चाहते हैं तो यह संभव नहीं है। –