使用GDB获取lambda的行号

时间:2014-01-30 12:17:49

标签: c++ lambda gdb name-mangling

我们有一个段错误的回溯,它引用了lambda的编译器生成的名称:

(gdb) bt
#0  std::_Function_handler<std::function<bool()>(), bold::AdHocOptionTreeBuilder::buildTree(bold::Agent*)::__lambda59>::_M_invoke(const std::_Any_data &) (__functor=...) at /usr/include/c++/4.8/functional:2057
#1  0x08146d2c in operator() (this=<optimized out>) at /usr/include/c++/4.8/functional:2464
...

指定的名称为bold::AdHocOptionTreeBuilder::buildTree(bold::Agent*)::__lambda59。但是,你可以告诉该文件中有很多lambda!有没有办法将生成的函数名称映射到源代码中的行号?我们有其他函数的行号,但是这里只引用std::_Function_handler<>的类型参数。

1 个答案:

答案 0 :(得分:1)

链接器选项-Map mapfile应该为您提供显示每个函数源自何处的信息,包括lambda。如果程序是使用调试信息nm --line-numbers编译的,那么-g也可能有用。

此外,我认为您可以在GDB中使用set print symbol-filename on,然后评估&bold::AdHocOptionTreeBuilder::buildTree(bold::Agent*)::__lambda59