c++ - 使用 GDB 获取 lambda 的行号

标签 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<> 的类型参数引用。 .

最佳答案

链接器选项 -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/

相关文章:

c++ - 如果我不想管理我指向的对象的内存,我应该使用 unique_ptr 吗?

c - gdb 通过指向错误的代码行显示不正确的回溯

java - lambda 性能的差异?

debugging - 如何让gdb一起打印两个源代码对应的反汇编代码?

eclipse - 在 mac 上的 Eclipse 中找不到 GDB 选项

C++:销毁自己内部的lambda

c++ - C++ 和 Spotify API 入门

c++ - 错误 MIDL2025 : syntax error : expecting an interface

java - MyFaces @ManagedBean 中的 Lambda 导致丢失/奇怪的行为

c# - 增强 C# 语法糖(或绕过 "Cannot use ref or out parameter")