使用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的“机器接口”层,在这种情况下,它将无法访问数据格式化程序结果。
数据格式化程序也可能失败,因为变量已被部分/完全优化掉。 – zneak
我使用'O0'和'-DDEBUG = 2',所以不应该有任何优化 – MrE
终于得到了这个,但是当我做'fr v myset'我得到了大小,并且{} 所以它不检查该对象出于某种原因。请注意,该集包含对象本身,所以这可能是为什么......但那么我如何检查对象isnide集? – MrE