我们有一个段错误的回溯,它引用了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<>
的类型参数。
答案 0 :(得分:1)
链接器选项-Map mapfile
应该为您提供显示每个函数源自何处的信息,包括lambda。如果程序是使用调试信息nm --line-numbers
编译的,那么-g
也可能有用。
此外,我认为您可以在GDB中使用set print symbol-filename on
,然后评估&bold::AdHocOptionTreeBuilder::buildTree(bold::Agent*)::__lambda59