Debugger: Fix std::unordered_{map,set} dumper for LLDB on Linux

Change-Id: Id96d02cddcccdd7765e5a098bb98f894122781a1
Reviewed-by: Christian Stenger <christian.stenger@theqtcompany.com>
This commit is contained in:
hjk
2015-04-14 14:18:17 +02:00
parent f9ae887ae7
commit e452ebde97
2 changed files with 13 additions and 14 deletions

View File

@@ -554,24 +554,24 @@ def qdump__std__unordered_map(d, value):
ptrSize = d.ptrSize() ptrSize = d.ptrSize()
try: try:
# gcc ~= 4.7 # gcc ~= 4.7
size = value["_M_element_count"] size = int(value["_M_element_count"])
start = value["_M_before_begin"]["_M_nxt"] start = value["_M_before_begin"]["_M_nxt"]
offset = 0 offset = 0
except: except:
try: try:
# libc++ (Mac) # libc++ (Mac)
size = value["_M_h"]["_M_element_count"] size = int(value["_M_h"]["_M_element_count"])
start = value["_M_h"]["_M_bbegin"]["_M_node"]["_M_nxt"] start = value["_M_h"]["_M_bbegin"]["_M_node"]["_M_nxt"]
offset = 0 offset = 0
except: except:
try: try:
# gcc 4.9.1 # gcc 4.9.1
size = value["_M_h"]["_M_element_count"] size = int(value["_M_h"]["_M_element_count"])
start = value["_M_h"]["_M_before_begin"]["_M_nxt"] start = value["_M_h"]["_M_before_begin"]["_M_nxt"]
offset = 0 offset = 0
except: except:
# gcc 4.6.2 # gcc 4.6.2
size = value["_M_element_count"] size = int(value["_M_element_count"])
start = value["_M_buckets"].dereference() start = value["_M_buckets"].dereference()
# FIXME: Pointer-aligned? # FIXME: Pointer-aligned?
offset = pairType.sizeof offset = pairType.sizeof
@@ -579,17 +579,16 @@ def qdump__std__unordered_map(d, value):
# We don't know where the data is # We don't know where the data is
d.putNumChild(0) d.putNumChild(0)
return return
d.putItemCount(size) d.putItemCount(size)
if d.isExpanded(): if d.isExpanded():
p = d.pointerValue(start) p = d.pointerValue(start)
if d.isMapCompact(keyType, valueType): if d.isMapCompact(keyType, valueType):
with Children(d, size, childType=valueType): with PairedChildren(d, size, pairType=pairType):
for i in d.childRange(): for i in d.childRange():
pair = d.createValue(p + ptrSize, pairType) pair = d.createValue(p + ptrSize, pairType)
with SubItem(d, i): with SubItem(d, i):
d.putField("iname", d.currentIName) d.putPair(pair, i)
d.putName("[%s] %s" % (i, pair["first"]))
d.putValue(pair["second"])
p = d.extractPointer(p) p = d.extractPointer(p)
else: else:
with Children(d, size, childType=pairType): with Children(d, size, childType=pairType):
@@ -603,24 +602,24 @@ def qdump__std____debug__unordered_map(d, value):
def qdump__std__unordered_set(d, value): def qdump__std__unordered_set(d, value):
try: try:
# gcc ~= 4.7 # gcc ~= 4.7
size = value["_M_element_count"] size = int(value["_M_element_count"])
start = value["_M_before_begin"]["_M_nxt"] start = value["_M_before_begin"]["_M_nxt"]
offset = 0 offset = 0
except: except:
try: try:
# libc++ (Mac) # libc++ (Mac)
size = value["_M_h"]["_M_element_count"] size = int(value["_M_h"]["_M_element_count"])
start = value["_M_h"]["_M_bbegin"]["_M_node"]["_M_nxt"] start = value["_M_h"]["_M_bbegin"]["_M_node"]["_M_nxt"]
offset = 0 offset = 0
except: except:
try: try:
# gcc 4.6.2 # gcc 4.6.2
size = value["_M_element_count"] size = int(value["_M_element_count"])
start = value["_M_buckets"].dereference() start = value["_M_buckets"].dereference()
offset = d.ptrSize() offset = d.ptrSize()
except: except:
# gcc 4.9.1 # gcc 4.9.1
size = value["_M_h"]["_M_element_count"] size = int(value["_M_h"]["_M_element_count"])
start = value["_M_h"]["_M_before_begin"]["_M_nxt"] start = value["_M_h"]["_M_before_begin"]["_M_nxt"]
offset = 0 offset = 0

View File

@@ -4372,12 +4372,12 @@ void tst_Dumpers::dumper_data()
"std::unordered_map<unsigned int, unsigned int> map1;\n" "std::unordered_map<unsigned int, unsigned int> map1;\n"
"map1[11] = 1;\n" "map1[11] = 1;\n"
"map1[22] = 2;\n" "map1[22] = 2;\n"
"unused(&map1);\n\n"
"std::unordered_map<std::string, float> map2;\n" "std::unordered_map<std::string, float> map2;\n"
"map2[\"11.0\"] = 11.0;\n" "map2[\"11.0\"] = 11.0;\n"
"map2[\"22.0\"] = 22.0;\n" "map2[\"22.0\"] = 22.0;\n"
"unused(&map2);\n")
"unused(&map1);\n")
+ Cxx11Profile() + Cxx11Profile()