2017-07-19 17 views
0

これはVSCode固有の質問です。inspect C++ std :: set with VDBode with LLDB

ここでは、VSCodeのレポが質問しているからです。

私はVSCodeをMac OSで、LLDBを使用しています。

私はstd::setの検査方法を見つけようとしています。

私はこれに関する文書を見つけることができません。私はGDBでマクロを使ってそれを行ういくつかの方法を見つけました(https://sourceware.org/ml/gdb/2008-02/msg00064/stl-views.gdb

しかし、私はVSコードで動作するようにはできません。WebFreakネイティブデバッグ拡張機能を使用しましたが、実行時には "実行可能ファイル" 、エラー、ログので、私はそれをあきらめていない)

LLDB)はシンボルが右の作業を取得するために-DDEBUG=2のフラグを使用して(これまでのところ、私のために良い仕事をしているが、variablessetを開こうとすると、私は何も見ませんフレーム。

私はそれに含まれるアイテムの数だけを取得します。

LLDBのセットを検査するGDBのマクロと類似のマクロはありますか?それとも別の方法がありますか?

おかげ

答えて

0

lldbはかなり印刷オブジェクトに "データフォーマッタ" を使用しています。参照:

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

詳細については。

lldbには、clang標準ライブラリのstd :: set用のデータフォーマッタが組み込まれています。 VSCodeがそのバージョンのC++標準ライブラリを使用する場合、データフォーマッタは自動的に起動する必要があります。 VSCodeはあなたがlldbコマンドラインへのアクセスを提供する場合は、thuslyの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がldbbのgdbの「マシンインタフェース」レイヤーのエミュレーションを使用している可能性があります。この場合、データフォーマッタにアクセスすることはできません結果。

+0

変数が部分的または完全に最適化されているため、データフォーマッタも失敗する可能性があります。 – zneak

+0

私は 'O0'と' -DDEBUG = 2'を使用していますので、最適化するべきではありません – MrE

+0

最後にこれを試してみましたが、 'fr v myset'を実行するとサイズは{ }何らかの理由でオブジェクト。セットにはオブジェクト自体が含まれていることに注意してください。なぜそうかもしれませんが...オブジェクトを検査する方法はセットではありませんか? – MrE