我们有一个段错误的回溯,它引用编译器为 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<>
的类型参数引用。 .
最佳答案
链接器选项 -Map mapfile
应该为您提供显示每个函数起源位置的信息,包括 lambda 函数。 nm --line-numbers
也可能有效,如果程序是使用调试信息 -g
编译的。
此外,我认为您可以在 GDB 中使用 set print symbol-filename on
,然后计算 &bold::AdHocOptionTreeBuilder::buildTree(bold::Agent*)::__lambda59
关于c++ - 使用 GDB 获取 lambda 的行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21456332/