【问题标题】:inspect C++ std::set in VSCode with LLDB使用 LLDB 在 VSCode 中检查 C++ std::set
【发布时间】:2017-12-25 01:20:54
【问题描述】:

这是一个 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 标志来让符号正常工作),但是当我试图在 variables 框架中打开 set 时,我什么也看不到。

我只得到里面的项目数。

是否有与 GDB 类似的宏来检查 LLDB 中的集合?还是有其他方法?

谢谢

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 数据格式化程序也可能失败,因为变量已被部分/全部优化掉。
    • 我用O0-DDEBUG=2,所以应该没有优化
    • 终于要试试这个了,但是当我做fr v myset 时,我得到了尺寸,并且{} 因为某种原因它没有检查对象。请注意,集合本身包含对象,所以这可能就是为什么......但是我如何在集合中检查对象?
    猜你喜欢
    • 2013-12-24
    • 2014-04-15
    • 2020-02-22
    • 1970-01-01
    • 2010-12-14
    • 2015-08-01
    • 2023-02-26
    • 2012-06-10
    • 2018-01-11
    相关资源
    最近更新 更多