Debugger: Fix std vector dumper for msvc

And potentially QNX

Change-Id: I53bd34df5b3b4dfbaa50cd84c5dd9d3c975181d8
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
David Schulz
2016-10-11 14:33:21 +02:00
parent a07e9450e8
commit 792a9015ec

View File

@@ -799,7 +799,7 @@ def qedit__std__vector(d, value, data):
gdb.execute(cmd) gdb.execute(cmd)
def qdump__std__vector(d, value): def qdump__std__vector(d, value):
if d.isQnxTarget(): if d.isQnxTarget() or d.isMsvcTarget():
qdumpHelper__std__vector__QNX(d, value) qdumpHelper__std__vector__QNX(d, value)
else: else:
qdumpHelper__std__vector(d, value, False) qdumpHelper__std__vector(d, value, False)
@@ -840,20 +840,26 @@ def qdumpHelper__std__vector(d, value, isLibCpp):
def qdumpHelper__std__vector__QNX(d, value): def qdumpHelper__std__vector__QNX(d, value):
innerType = value.type[0] innerType = value.type[0]
isBool = str(innerType) == 'bool' isBool = innerType.name == 'bool'
if isBool: if isBool:
impl = value['_Myvec'] try:
start = impl['_Myfirst'] impl = value['_Myvec']['_Mypair']['_Myval2']
last = impl['_Mylast'] except:
end = impl['_Myend'] impl = value['_Myvec']
size = value['_Mysize'] start = impl['_Myfirst'].pointer()
last = impl['_Mylast'].pointer()
end = impl['_Myend'].pointer()
size = value['_Mysize'].integer()
storagesize = start.dereference().type.size() * 8 storagesize = start.dereference().type.size() * 8
else: else:
start = value['_Myfirst'] try:
last = value['_Mylast'] impl = value['_Mypair']['_Myval2']
end = value['_Myend'] except:
size = (last.integer() - start.integer()) / innerType.size() impl = value
alloc = (end.integer() - start.integer()) / innerType.size() start = impl['_Myfirst'].pointer()
last = impl['_Mylast'].pointer()
end = impl['_Myend'].pointer()
size = (last - start) // innerType.size()
d.check(0 <= size and size <= 1000 * 1000 * 1000) d.check(0 <= size and size <= 1000 * 1000 * 1000)
d.check(last <= end) d.check(last <= end)
@@ -868,11 +874,11 @@ def qdumpHelper__std__vector__QNX(d, value):
for i in d.childRange(): for i in d.childRange():
q = start + int(i / storagesize) q = start + int(i / storagesize)
with SubItem(d, i): with SubItem(d, i):
d.putValue((q.dereference() >> (i % storagesize)) & 1) d.putValue((q.dereference().pointer() >> (i % storagesize)) & 1)
d.putType("bool") d.putType("bool")
d.putNumChild(0) d.putNumChild(0)
else: else:
d.putArrayData(start, size, innerType) d.putPlotData(start, size, innerType)
def qdump__std____1__vector(d, value): def qdump__std____1__vector(d, value):
qdumpHelper__std__vector(d, value, True) qdumpHelper__std__vector(d, value, True)