2011-03-21 15 views
12

के रूप में व्याख्या करता है, मैं उपलब्ध कोर डंप के आधार पर क्रैश की जांच कर रहा हूं। एप्लिकेशन क्रैशिंग एक सी ++ प्रोग्राम है, जो जीसीसी के साथ बनाया गया है और आरएच 5 पर चल रहा है। बैकट्रैक # 1 फ्रेम तक मान्य लगता है। किसी ऑब्जेक्ट को मुद्रित करने का प्रयास करते हुए मुझे <invalid address>, <error reading variable> चूंकि मेरे पास # 2 फ्रेम से ऑब्जेक्ट का पता है, यह एक वैध धारणा है कि मैं किसी भी तरह स्मृति को डंप कर सकता हूं जिसमें ऑब्जेक्ट आवंटित किया जाता है और अभी भी कुछ जानकारी एकत्रित करता है। इसके अलावा, ऑब्जेक्ट को गठबंधन करने का अनुमान लगाने की बजाय, क्या मैं पते को प्रिंट करने के लिए जीडीबी को मजबूर कर सकता हूं जैसे कि यह एक वस्तु है, भले ही यह कुछ त्रुटि का पता लगाए। मेरा विचार यह है कि शायद ऑब्जेक्ट पहले से ही हटा दिया गया है, लेकिन शायद स्मृति अभी भी है और मैं कुछ सदस्य चर मुद्रित कर सकता हूं।gdb स्मृति ऑब्जेक्ट को ऑब्जेक्ट

कृपया टिप्पणी करें कि संभव है, और यदि हां, तो यह जीडीबी शर्तों में कैसे किया जाना चाहिए। 10x।

+3

सुनिश्चित नहीं हैं कि अगर यह काम करेंगे, लेकिन आप की कोशिश कर सकते 'प्रिंट * ((Obj *) पता)'। यह कभी-कभी मेरे लिए काम करता है। – JaredC

उत्तर

18

ठीक है, अगर आप एक पते आप कर सकते हैं हमेशा कार्य करें:

print *(class MyClass*)pointer_var

+0

खैर मैं इसे इस तरह से मुद्रण की कोशिश की '(gdb) पी (वर्ग MyClass *) m_pointer' लेकिन मैं मिल' कोई struct MyClass' नामित प्रकार यह gdb की तरह लगता है मेरी कक्षा का पता नहीं है। –

+0

@Yordan आपको निश्चित रूप से उस संरचना में डालने की आवश्यकता है जिसे आप मुद्रित करना चाहते हैं। –

+0

@Let_Me_Be आपका क्या मतलब है? ऐसा नहीं है कि '(क्लास MyClass *)' भाग क्या करता है। –

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