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

问题描述:

这是一个VSCode特定的问题。使用LLDB检查VSCode中的C++ std :: set

由于VSCode回购指向对SO提出问题,因此询问。

我在Mac OS上使用VSCode,使用LLDB。如何检查 std::set

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

但我无法让GDB与VS代码一起工作,没有错误,没有日志,所以我放弃了对)

LLDB迄今(使用-DDEBUG=2标志,以得到正确的工作)符号的工作为我好,但我看不到任何试图在variables打开set时帧。

我只收到它中的项目数。

是否有类似的宏作为GDB的检查组在LLDB?或者有其他方法吗?

谢谢

lldb使用“数据格式化程序”漂亮的打印对象。请参阅:

http://lldb.llvm.org/varformats.html

了解更多详情。

lldb内置数据格式化程序,用于从ng标准库中获取std :: set。如果VSCode使用该版本的C++标准库,则数据格式化程序应该自动触发。如果VSCode,您可以访问到LLDB命令行,你可以检查的正是如此的std ::设置数据格式:

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

+0

数据格式化程序也可能失败,因为变量已被部分/完全优化掉。 – zneak

+0

我使用'O0'和'-DDEBUG = 2',所以不应该有任何优化 – MrE

+0

终于得到了这个,但是当我做'fr v myset'我得到了大小,并且{} 所以它不检查该对象出于某种原因。请注意,该集包含对象本身,所以这可能是为什么......但那么我如何检查对象isnide集? – MrE