首页 > 解决方案 > gdb中的C ++ lambda“__closure”地址

问题描述

我知道在 C++11 或更高版本中有一个隐藏的闭包类用于 lambda。但是调用 lambda__clousre时在 gdb 中调试时的值是什么时候?0x0这意味着什么?

// a.cpp
#include <iostream>

using std::cout;

int main() {
  auto l1 = []() {
    cout << "lambda 1\n";
  };
  auto l2 = []() {
    cout << "lambda 2\n";
  };
  l1();
  l2();
  using F = void (*)();
  F lv = l2;
  lv();
}

在 gdb 中:

Breakpoint 1, <lambda()>::operator()(void) const (
    __closure=0x7fffffffd83e) at a.cpp:7
7           cout << "lambda 1\n";
(gdb) c
Continuing.
lambda 1

Breakpoint 2, <lambda()>::operator()(void) const (
    __closure=0x7fffffffd83f) at a.cpp:10
10          cout << "lambda 2\n";
(gdb) c
Continuing.
lambda 2

Breakpoint 2, <lambda()>::operator()(void) const (__closure=0x0)
    at a.cpp:10
10          cout << "lambda 2\n";
(gdb) c
Continuing.
lambda 2
[Inferior 1 (process 27152) exited normally]

g++ & gdb:

$ g++ --version
g++ (GCC) 8.2.0

$ g++ -g -O0 -std=c++17 a.cpp -o a

$ gdb --version
GNU gdb (GDB) 8.1.1

标签: c++lambdagdb

解决方案


推荐阅读