पर unordered_map हाल ही में मैंने अपने सिस्टम पर उत्कृष्ट बढ़ावा :: unordered_map का उपयोग करना शुरू कर दिया है, लेकिन एक दोष मिला: मैं यह नहीं समझ सका कि इसकी सामग्री का निरीक्षण कैसे किया जाए। इसे जीडीबी पर प्रिंट करना मुझे टेबल_ और बाल्टी_ देता है, लेकिन यह नहीं मिला कि आइटम कहां हैं। किसी के बारे में कोई सुराग है?सुंदर प्रिंटिंग बूस्ट :: gdb
उत्तर
प्रिंटर चाहते थे, मैं एक बनाने में कामयाब रहा है। यहाँ कोड है:
class BoostUnorderedMapPrinter:
"prints a boost::unordered_map"
class _iterator:
def __init__ (self, fields):
type_1 = fields.val.type.template_argument(0)
type_2 = fields.val.type.template_argument(1)
self.buckets = fields.val['table_']['buckets_']
self.bucket_count = fields.val['table_']['bucket_count_']
self.current_bucket = 0
pair = "std::pair<%s const, %s>" % (type_1, type_2)
self.pair_pointer = gdb.lookup_type(pair).pointer()
self.base_pointer = gdb.lookup_type("boost::unordered_detail::value_base< %s >" % pair).pointer()
self.node_pointer = gdb.lookup_type("boost::unordered_detail::hash_node<std::allocator< %s >, boost::unordered_detail::ungrouped>" % pair).pointer()
self.node = self.buckets[self.current_bucket]['next_']
def __iter__(self):
return self
def next(self):
while not self.node:
self.current_bucket = self.current_bucket + 1
if self.current_bucket >= self.bucket_count:
raise StopIteration
self.node = self.buckets[self.current_bucket]['next_']
iterator = self.node.cast(self.node_pointer).cast(self.base_pointer).cast(self.pair_pointer).dereference()
self.node = self.node['next_']
return ('%s' % iterator['first'], iterator['second'])
def __init__(self, val):
self.val = val
def children(self):
return self._iterator(self)
def to_string(self):
return "boost::unordered_map"
एक विशिष्ट हैश तालिका कार्यान्वयन में, बाल्टी में एक लिंक्ड सूची का सिर होता है जिसमें वास्तव में इस विशेष हैश से संबंधित मान होते हैं। इस प्रकार मैं buckets_
पर शर्त लगाऊंगा।
एक और विकल्प: अब gdb के लिए विभिन्न पायथन सुंदर प्रिंटर लाइब्रेरी हैं, और मुझे लगता है कि आप सी ++ 0x के साथ काम करने वाले एक को ढूंढ सकते हैं और यह मान सकते हैं कि यह मूल्यों को कहां देखता है।
ज़रूर, मैं देख लिया है जीसीसी tr1 कार्यान्वयन और संरचनाओं बहुत अलग हैं, और एक की जगह अच्छा है क्योंकि मैं मिल गया है को बढ़ावा देने कार्यान्वयन तेजी से tr1 समकक्ष – scooterman
- 1. जीडीबी प्रश्न: सुंदर 2 डी ऐरे प्रिंटिंग?
- 2. सी ++ जीडीबी पायथन सुंदर प्रिंटिंग ट्यूटोरियल?
- 3. सुंदर प्रिंटिंग एचटीएमएल के लिए मॉड्यूल?
- 4. हास्केल - एक सूची को सुंदर प्रिंटिंग के साथ समस्या
- 5. जीडीबी सीधी फ़ंक्शन कॉल के साथ सुंदर प्रिंटिंग
- 6. बूस्ट :: एक एसडीडी कंटेनर प्रारूप और कस्टम प्रिंटिंग
- 7. gdb
- 8. gdb
- 9. gdb
- 10. gdb
- 11. gdb
- 12. gdb
- 13. GDB
- 14. gdb
- 15. gdb
- 16. gdb
- 17. gdb
- 18. gdb
- 19. gdb
- 20. gdb
- 21. gdb
- 22. gdb
- 23. gdb
- 24. मैं gdb
- 25. प्रिंटिंग स्ट्रिंग जीडीबी
- 26. जावा में प्रिंटिंग "जावा प्रिंटिंग"
- 27. सुंदर प्रिंटर के लिए gdb में कन्स्ट्रक्टर को कॉल करने के लिए कैसे करें
- 28. कैसे GDB
- 29. प्रिंट GDB
- 30. मैं gdb
मुझे पता है की तुलना में होने के लिए नहीं है मुझे थोड़ा देर हो चुकी है, लेकिन मैं जीडीबी में इस सुंदर प्रिंटर को कैसे लोड (और उपयोग) कर सकता हूं? –
इसे पोस्ट करने के लिए धन्यवाद। यह बाद के संस्करणों के लिए काम नहीं करता है (मैंने 1.58+ पर परीक्षण किया है), लेकिन मैंने इसे लिया और इसे आज सुबह 1.58 के साथ काम करने के लिए अपडेट किया। थोड़ी अधिक उड़ान के समय के बाद मैं https://github.com/ruediger/Boost-Pretty- प्रिंटर को पुल अनुरोध का योगदान दूंगा यदि यह आपके साथ ठीक है। –