2011-06-20 12 views
5

Intenté con 7.2 para debian, pero parece que no es posible ingresar a C++ 0x lambdas.¿Alguna suerte depurando lambdas con gdb?

+0

de vanguardia, probablemente mejor preguntar en g ++ o lista de correo GDB –

+0

¿Nos puedes contar exactamente lo que salió mal? – templatetypedef

+0

@templatetypedef No pude hacer paso a paso la función lambda. – piotr

Respuesta

4

Pude entrar en un lambda en un programa muy simple (ubuntu 10.04, gdb-7.1, gcc-4.6 con -g bandera).

#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); 
} 

Aquí hay una transcripción de la sesión.

(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 Interesante, comprobaré tus resultados. – piotr

+1

Tengo que usar esto dentro de la lambda para acceder a capturas por cierto. Usar el mismo símbolo capturado produce basura. – piotr