c++ - 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
解决方案
推荐阅读
- r - parLapply:未使用的参数(MoreArgs
- c# - c# - 将新的父节点添加到现有的 Xml 文件
- algorithm - 以最少匝数在网格上生成树
- javascript - babel-preset-env 不使用 webpack 转换箭头函数
- openssl - 我在服务器模式下使用 iperf3 时安装了 iperf3 我收到以下错误 libcrypto.so.1.1 not found
- android - 我可以撤回并再次发送我的应用程序的另一个 Beta 版本 - Android 吗?
- elasticsearch - 在 Elasticsearch 中搜索具有相同值的文档
- html - 中心响应引导轮播
- angular - Angular5 连续导航
- javascript - 如何添加表单提交计数器?