使用 LLDB 检查 VSCode 中的 C++ std::set
inspect C++ std::set in VSCode with LLDB
这是一个VSCode特定的问题。
在这里提问,因为 VSCode 存储库指向在 SO 上提问。
我在Mac OS上使用VSCode,带有LLDB。
我正在尝试弄清楚如何检查std::set
.
我找不到任何关于此的文档;我找到了一些使用宏使用 GDB 的方法 (https://sourceware.org/ml/gdb/2008-02/msg00064/stl-views.gdb(
但我无法让 GDB 使用 VS Code(使用 WebFreak 本机调试扩展,但在运行时我只是得到"运行可执行文件",什么也没发生,没有错误,没有日志,所以我放弃了(
到目前为止,LLDB 对我来说效果很好(使用-DDEBUG=2
标志使符号正常工作(,但是在尝试在variables
框架中打开set
时,我什么也没看到。
我只得到其中的项目数。
是否有与 GDB 类似的宏来检查 LLDB 中的集合?还是有其他方法?
谢谢
lldb使用"data formatters"来漂亮打印对象。 看:
http://lldb.llvm.org/varformats.html
了解更多详情。
LLDB 具有来自 clang 标准库的 std::set 的内置数据格式化程序。 如果 VSCode 使用该版本的 C++ 标准库,则数据格式化程序应自动触发。 如果 VSCode 允许您访问 lldb 命令行,您可以这样检查 std::set 数据格式化程序:
(lldb) fr v my_set
(std::__1::set<int, std::__1::less<int>, std::__1::allocator<int> >) my_set = size=3 {
[0] = 100
[1] = 200
[2] = 300
}
如果您看到细分的元素,则数据格式化程序正在工作(您可以使用控制台查看它们。 如果他们使用不同版本的 STL,则上面的链接将引导您开始为其对象布局编写数据格式化程序。
数据格式化程序也挂钩到API的lldb提供的检查值中,但可能是VSCode正在使用lldb对gdb的"机器接口"层的模拟,在这种情况下,它将无法访问数据格式化程序结果。
- 在声明中合并两个常量"std::set"(不是在运行时)
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 将 std::set 与基于键的比较器一起使用
- 修改"std::set"中用户定义类型的值
- 如何在构造函数参数中初始化"std::set"?
- 如何使用 lower_bound/upper_bound 从 std::set 获取索引号?
- 如何在 C++ 中转发声明 std::set?
- 重构使用动态强制转换的 std::set 的比较运算符
- 为什么 std::set.erase(first, last) 会影响从中获取 (first, last) 的容器?
- std::set 是否将对象连续存储在内存中?
- 是否有一个 std::set 函数来确定不超过数字 x 的最大元素?
- 有什么理由不扩展 std::set 以添加下标运算符吗?
- 我从 std::set 得到const_iterator而不是迭代器
- 为什么 std:set(带有单个冒号)可以编译?
- 遍历 std::set 中包含的所有三重不同值?
- 插入 std::set 作为 std::map 的键
- 如何在 c++ 中使用默认值将 std::set 转换为 std::map
- 错误:'class std::unique_ptr<std::set<long unsigned int> >'没有名为 'size' 的成员
- 如何从 std::set 绘制 n 个元素的样本
- 为什么 std::set 容器使用的内存比其数据大小多得多?