बाइनरी में कुछ प्रकार की उपयोगी जानकारी मौजूद है, क्योंकि जीडीबी लैम्ब्डा कार्यों के लिए अधिक उपयोगी नाम दिखाने में सक्षम है।
(gdb) bt
#0 <lambda()>::operator()(void) const (__closure=0x7fffffffd5ef) at ll.cc:3
#1 0x00000000004005e7 in main() at ll.cc:3
को बंद करने के प्रकार के साथ instantiated एक टेम्पलेट के घायल नाम का एक अलग नाम जैसे भी शामिल है (हालांकि शायद डिबग जानकारी बस, एक बंद प्रकार है के रूप में GDB <lambda()>::operator()
के रूप में सभी तरह के कार्यों से पता चलता कहते हैं)
#3 0x0000000000400712 in func<main()::<lambda()> >(<lambda()>) (t=...) at l.cc:4
लेकिन शायद नाम केवल तभी उपयोग किया जाता है जब इसे अन्य उलझन वाले नामों में जरूरी हो।
जीसीसी के साथ आप भी मुद्रण द्वारा बंद के operator()
का नाम प्रिंट कर सकते हैं पूर्व निर्धारित चर __PRETTY_FUNCTION__
, जो main()::<lambda()>
GDB के अजगर API का उपयोग करना मैं एक ही बंद करने के लिए अभी तक एक और नाम प्राप्त कर सकते हैं की तरह कुछ पता चलता है, जैसे
(gdb) python import gdb; print gdb.block_for_pc(0x8048591).function.name
__lambda0::operator()() const
तो यह कम से कम तीन अलग-अलग नाम हैं! तो मुझे लगता है कि यह शायद backtrace_symbols_fd
की सीमा है कि इसे लैम्ब्डा कार्यों के लिए नाम नहीं मिल रहे हैं।
स्रोत
2015-04-11 19:13:18
यह संदर्भ में उपयोगी है कि कौन सा संदर्भ (डीबगर? टूलचेन?) आप इसे देखना चाहते हैं। – MSalters
हां, आप किस कंपाइलर और डीबगर का उपयोग कर रहे हैं? – LThode
@MSalters किया गया, धन्यवाद –