2011-06-20 9 views
5

debianでは7.2で試しましたが、C++ 0x lambdasに入ることはできないようです。gdbを使用したluckデバッグ用ラムダはありますか?

+0

刃先が切れている可能性があります。g ++やgdbメーリングリストに尋ねてください。 –

+0

何が間違っているのか詳しく説明できますか? – templatetypedef

+0

@templatetypedef私はラムダ関数にステップバイステップで行うことができませんでした。 – piotr

答えて

4

非常に簡単なプログラム(ubuntu 10.04、gdb-7.1、gcc-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

私はキャプチャにアクセスするためにラムダ内でこれを使用する必要がありますbtw。同じキャプチャされたシンボルを使用すると、ゴミが発生します。 – piotr

関連する問題