2017-07-19 29 views
0

這是一個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?或者有其他方法嗎?

謝謝

回答

0

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