c++ - GDB 可以调试 C++ lambdas 吗?

标签 c++ c++11 lambda gdb

我积极使用 C++ 11 功能。我在 Visual Studio 2013 中创建了依赖 lambda 来运行多个线程的程序(lambda 表示任务,线程接收它必须运行的 lambda 实例)。 Lambda 在静态库中定义并链接在可执行文件中,该可执行文件从该可执行文件创建的线程调用它。 当我尝试使用 GDB 调试此应用程序的 Linux 版本时,看起来 GDB 无法进入包含 lambda 的方法。它不能在这个函数中设置断点,当我尝试进入时,它甚至会进入 lambda 从其主体调用的方法,但是在这些方法的 return 之后它不会进入 lambda 主体,它转到 lambda 调用的下一个方法等。 有没有办法用 GDB 调试 lambdas body?

最佳答案

我以前在堆栈跟踪中看到过它们,所以它至少知道它们。我从来没有尝试过设置一个正常的断点。这是一种 hack,但您可以在 x86(-64) 上使用 asm volatile("int $3"); 在一个(或任何地方)设置断点。

这是一个示例程序:

int main(){
    auto f = [](){
        asm volatile("int $3");
    };
    f();
    return 0;
}

这是它到达断点时的回溯:

#0  0x0000000000400577 in main::{lambda()#1}::operator()() const ()
#1  0x000000000040058d in main ()

关于c++ - GDB 可以调试 C++ lambdas 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21776346/

相关文章:

c++ - boost::transform_iterator 不适用于 std::bind( &Pair::first, _1 )?

python - python中的lambda可以迭代dict吗?

java - 在有效日志级别检查的上下文中,Log4j2 中的替换参数和 Java lambda 表达式有什么区别?

Java Streams — 如何每第 n 个项目执行一个中间函数

c++ - 计算返回零而不是预期结果

c++ - 匹配两个文本文件的最有效方法?

c++ - 回退到复制构造函数不起作用?

c++ - 使用 std::array<Type, N> 的实例作为模板参数

c++ - MFC中不断增加进度条

c++ - 在 C++ 中反序列化时的类类型