7

他のほとんどの STL コンテナーは正常に印刷されますunordered_mapが、ごちゃごちゃしています。

私はoperator <<印刷に使用しますが、これは印刷に関するものではありません。これは、クラッシュしたときに LLDB プロンプトからハッシュを印刷したい場合です。

それが機能しないため、次のようなものを呼び出すことはできcall cout << varません。

それ自体が使用するテンプレート関数をリンクするなど、他に解決策はありませんcout <<か?それはうまくいきますか?(試していますが、コードを生成してリンクするには、テンプレートパラメーターの型を事前に知る必要があるため、機能しません)

4

2 に答える 2

0

unordered_mapメソッドを呼び出さずに、オブジェクト自体を調べることができるはずです。

たとえば、次の簡単なプログラムを見てみましょう。

#include <iostream>
#include <string>
#include <unordered_map>

using namespace std;

int main() {
    unordered_map<int, string> map;
    map[0] = "mary";
    map[1] = "had";
    map[2] = "a";
    map[3] = "little";
    map[4] = "lamb";

    return 0;
}

$ clang++ -std=c++11 -stdlib=libc++ -g unmap.cpp -o unmap
$ lldb unmap
Current executable set to 'unmap' (x86_64).
(lldb) break set --name main

lldb簡潔にするために出力は示していません

(lldb) proc launch

nreturn 0;ステートメントまで5回入力

(lldb)
Process 18063 stopped
* thread #1: tid = 0x1c03, 0x0000000100000aea unmap`main + 1082 at unmap.cpp:15, stop reason = step over
    frame #0: 0x0000000100000aea unmap`main + 1082 at unmap.cpp:15
   12       map[3] = "little";
   13       map[4] = "lamb";
   14
-> 15       return 0;
   16   }
   17

次に、次を使用してオブジェクトを調べますp

(lldb) p map[0]
(std::__1::unordered_map<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<const int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > >::mapped_type) $2 = "mary"
(lldb) p map[1]
(std::__1::unordered_map<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<const int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > >::mapped_type) $3 = "had"
(lldb) quit

lldb常に改善されているため、使用するバージョンによって違いが生じます。

$ lldb -version
LLDB-179.5

(つまり、Xcode 5 DP 6 コマンド ライン パッケージに付属するもの)

于 2013-09-11T08:14:34.573 に答える
0

オープン ソースの lldb を使用して自分でビルドする場合は、使用できる unordered_map の合成プロバイダーがあります。

著者: enrico 日付: Wed Sep 4 12:48:52 2013 New Revision: 189964

URL: http://llvm.org/viewvc/llvm-project?rev=189964&view=revログ: これは、libc++ 順不同 (マルチ) マップとセットの合成プロバイダーの例です。Jared Grubb の作成と共有に感謝します!

于 2013-09-11T17:30:39.963 に答える