c++ - 使用 LLDB 检查 VSCode 中的 C++ std::set

标签 c++ debugging visual-studio-code lldb stdset

这是一个 VSCode 特定的问题。

在这里提问,因为 VSCode 存储库指向在 SO 上提问。

我在 Mac OS 上使用 VSCode 和 LLDB

我正在尝试弄清楚如何检查 std::set

我找不到这方面的任何文档;我找到了一些使用宏 ( https://sourceware.org/ml/gdb/2008-02/msg00064/stl-views.gdb ) 的 GDB 方法

但我无法让 GDB 与 VS Code 一起工作(使用了 WebFreak Native Debug 扩展,但在运行时我只是得到“正在运行的可执行文件”,但没有任何反应,没有错误,没有日志,所以我放弃了)

到目前为止,LLDB 对我来说效果很好(使用 -DDEBUG=2 标志让符号正常工作),但是当我尝试打开 set 时我什么也没看到变量框架。

我只得到其中的项目数。

是否有与 GDB 类似的宏来检查 LLDB 中的集合?还是有别的办法?

谢谢

最佳答案

lldb 使用“数据格式化程序”来漂亮地打印对象。见:

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 的“机器接口(interface)”层,在这种情况下它将无法访问数据格式化程序结果.

关于c++ - 使用 LLDB 检查 VSCode 中的 C++ std::set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45196166/

相关文章:

c++ - VS13 C++ 贪心匹配不够贪心

c++ - 是否可以将纯虚函数覆盖到模板?

android - 调试 Android 中的 CSS 布局故障

c# - 如何在 Visual Studio Code for Unity 函数名称中获取智能感知?

c++ - 使用 C++ 接口(interface)在 Prolog 中进行列表处理

c# - 尝试读取或写入 protected 内存。导入到 C# 的 C++ dll

c++ - 打印实例链

c++ - 如何在gdb的调用命令中使用C++默认参数

git - VSTS Markdown 文档中图像的正确地址是什么?

javascript - Angular2 : how to prevent exception on specific file like zone. js?