2011-06-20 9 views
5

डेबियन के लिए 7.2 के साथ प्रयास किया, लेकिन लगता है कि C++ 0x lambdas में कदम उठाना संभव नहीं है।gdb के साथ lamdas डीबगिंग कोई भाग्य?

+0

काटने वाला किनारा, संभवतः जी ++ या जीडीबी मेलिंग सूची पर पूछने से बेहतर –

+0

क्या आप गलत तरीके से विस्तार कर सकते हैं? – templatetypedef

+0

@templatetypedef मैं लैम्ब्डा फ़ंक्शन में चरण-दर-चरण नहीं कर सका। – piotr

उत्तर

4

मैं एक बहुत ही सरल कार्यक्रम (उबंटू 10.04, जीडीबी-7.1, जीसीसी-4.6 -g ध्वज के साथ एक लैम्ब्डा में कदम रखने में सक्षम था)।

#include <iostream> 

void sayhello() 
{ 
    std::cout << "Hello world" << std::endl; 
} 

int main() 
{ 
    std::cout << "=========" << std::endl; 
    ([](void (*f)()) { 
    std::cout << "---------" << std::endl; 
    f(); 
    std::cout << "---------" << std::endl; 
    })(sayhello); 
} 

और यहां एक सत्र प्रतिलेख है।

(gdb) br main 
Breakpoint 1 at 0x804869e: file hello.C, line 10. 
(gdb) r 
Starting program: /tmp/hello 

Breakpoint 1, main() at hello.C:10 
10   std::cout << "=========" << std::endl; 
(gdb) n 
========= 
15   })(sayhello); 
(gdb) s 
operator() (this=0xbffff24f, f=0x8048614 <sayhello()>) at hello.C:12 
12   std::cout << "---------" << std::endl; 
(gdb) n 
--------- 
13   f(); 
(gdb) s 
sayhello() at hello.C:5 
5   std::cout << "Hello world" << std::endl; 
(gdb) n 
Hello world 
6  } 
(gdb) s 
operator() (this=0xbffff24f, f=0x8048614 <sayhello()>) at hello.C:14 
14   std::cout << "---------" << std::endl; 
(gdb) n 
--------- 
15   })(sayhello); 
(gdb) n 
main() at hello.C:16 
16  } 
+0

+1 दिलचस्प, मैं आपके परिणाम देखूंगा। – piotr

+1

मुझे कैप्चर बीटीडब्ल्यू तक पहुंचने के लिए लैम्ब्डा के अंदर इसका उपयोग करना होगा। उसी कब्जे वाले प्रतीक का उपयोग कचरा पैदा करता है। – piotr