2012-05-16 11 views
5

मैं सेब के gdb, संस्करण का उपयोग के रूप में पालनअजीब gdb संदेश C++ डिबगिंग कार्यक्रम

GNU gdb 6.3.50-20050815 (Apple version gdb-1344) (Fri Jul 3 01:19:56 UTC 2009) 
Copyright 2004 Free Software Foundation, Inc. 
GDB is free software, covered by the GNU General Public License, and you are 
welcome to change it and/or distribute copies of it under certain conditions. 
Type "show copying" to see the conditions. 
There is absolutely no warranty for GDB. Type "show warranty" for details. 
This GDB was configured as "x86_64-apple-darwin". 

मैं अपने की जरूरत के लिए के बाद से Xcode IDE का उपयोग नहीं करते makefile से प्रबंधित परियोजनाओं अधिक सुविधाजनक हैं, विशेष रूप से, क्योंकि मैं अक्सर जरूरत रिमोट मशीनों पर प्रोग्राम संकलित और चलाने के लिए। मैंने हाल ही में निम्नलिखित सी ++ 11 फीचर्स (जी ++ - 4.6 और मैकपोर्ट्स से 4.7 पर) का उपयोग करना शुरू कर दिया है: कन्स्ट्रक्टर, नलप्टर, ऑटो और decltype को ले जाएं। मैं rencently मेरी कोड d3bug करने के लिए आवश्यक है, और निम्नलिखित अजीब संदेश के बजाय एक समारोह में कदम की छपी:

Die: DW_TAG_unspecified_type (abbrev = 36, offset = 4315) 
     has children: FALSE 
     attributes: 
       DW_AT_name (DW_FORM_string) string: "decltype(nullptr)" 
इस संदेश प्रकट होता है के बाद से, सभी निम्नलिखित gdb आदेशों के, एक ही अजीब संदेश द्वारा उत्तर दिया रहे हैं तो यह नहीं है से

अब डीबग करना संभव है। ऐसा लगता है कि सी ++ 11 से संबंधित कुछ है। मेरा सवाल यह है कि, क्या आपने कभी इस संदेश का सामना किया है, और इसके बारे में कैसे छुटकारा पाएं?

अग्रिम

Giuliano

+3

मेरा अनुमान है कि आपका जीडीबी पीछे का संस्करण है - ऐसा लगता है कि [DWARF] (http://wiki.dwarfstd.org/index.php?title=Dwarf_FAQ#What_is_DWARF.3F) जानकारी है जो यह ' टी के बारे में पता नहीं है। समाधान: एक नया जीडीबी बनाएं/स्थापित करें। – Flexo

उत्तर

3

GDB का संस्करण उपयोग कर रहे (एप्पल के संस्करण) धन्यवाद संकलक आप macports से स्थापित की नई सुविधाओं का समर्थन करने के लिए प्रतीत नहीं होता।

त्रुटि संदेश की रिपोर्ट है कि GDB डिबगिंग जानकारी कार्यक्रम में सामना करना पड़ा है में से कुछ को नहीं समझता। डीबगिंग जानकारी जो दिखाया गया है वह स्पष्ट रूप से सी ++ 11 संबंधित है।

समाधान या तो एक नए जीडीबी (शायद वहां मैकपोर्ट से अगर वहां है) में अपग्रेड करना है, जीडीबी समझ में नहीं आने वाली सुविधाओं का उपयोग न करें, या स्वीकार करें कि आपके पास जीडीबी का संस्करण नहीं है इसे समझो

+0

मैंने कई बार मैकपोर्ट के जीडीबी को स्थापित करने का प्रयास किया, लेकिन यह मेरे लिए कभी काम नहीं किया। चूंकि मैं जल्दी में हूं, इसलिए मैं प्रोग्राम को न बदलना पसंद करूंगा। मुझे लगता है कि विकल्प # 3 इस पल के लिए एक है। स्वीकार किए जाते हैं। – Giuliano

6

http://gcc.gnu.org/gcc-4.5/changes.html कहते

जीसीसी अब उपसंहार के लिए भी खोलना जानकारी उत्पन्न करता है। जीसीसी द्वारा उत्पन्न डीडब्ल्यूएआरएफ डीबगिनोफो अब डीडब्ल्यूएआरएफ 3 की तुलना में पहले की तुलना में और कुछ डीडब्ल्यूएआरएफ 4 फीचर्स का उपयोग करता है। 7.0 से अधिक जीडीबी इन में से किसी एक को संभालने में सक्षम नहीं है, इसलिए जीसीसी 4.5 जेनरेट की गई बाइनरी या लाइब्रेरी जीडीबी 7.0 डीबग करने के लिए या बाद में इसकी आवश्यकता है। आप -gdwarf-3 -gstrict-dwarf विकल्पों के साथ DWARF4 सुविधाओं के उपयोग को अक्षम कर सकते हैं या -gdwarf-2 -gstrict-dwarf का उपयोग जीसीसी सिर्फ DWARF2 को प्रतिबंधित करने के लिए, लेकिन उपसंहार की जानकारी तनाव कम उत्सर्जित होता है बिना शर्त जब भी खोलना जानकारी उत्सर्जित होता है।

लेकिन आप पहले से ही यह जानते थे, क्योंकि जब वे अपने कंपाइलर को अपग्रेड करते हैं तो सभी रिलीज नोट पढ़ते हैं, है ना? ;-)

+3

जानना अच्छा है! निश्चित रूप से मैं अपने 'सूडो पोर्ट को जो कुछ भी इंस्टॉल करता हूं' करने से पहले पूरी रिलीज नोट्स को ध्यान से पढ़ता हूं! आप किससे बात कर रहे हैं? – Giuliano

+0

Lol ... बेशक हर कोई जानता था! – jww