forked from qt-creator/qt-creator
Debugger: Improve some libc++ dumper.
Change-Id: I18f2ad9e46c88302d523b879558f65b4a86b0e2c Reviewed-by: hjk <hjk121@nokiamail.com>
This commit is contained in:
@@ -193,7 +193,7 @@ class PairedChildrenData:
|
|||||||
self.keyIsQString = str(self.keyType) == ns + "QString"
|
self.keyIsQString = str(self.keyType) == ns + "QString"
|
||||||
self.keyIsQByteArray = str(self.keyType) == ns + "QByteArray"
|
self.keyIsQByteArray = str(self.keyType) == ns + "QByteArray"
|
||||||
|
|
||||||
class PairedChildren:
|
class PairedChildren(Children):
|
||||||
def __init__(self, d, numChild, pairType, maxNumChild = None):
|
def __init__(self, d, numChild, pairType, maxNumChild = None):
|
||||||
self.d = d
|
self.d = d
|
||||||
d.pairData = PairedChildrenData(d, pairType)
|
d.pairData = PairedChildrenData(d, pairType)
|
||||||
|
|||||||
@@ -451,21 +451,33 @@ def qdump_stringHelper(d, data, size, charSize):
|
|||||||
|
|
||||||
|
|
||||||
def qdump__std____1__string(d, value):
|
def qdump__std____1__string(d, value):
|
||||||
inner = d.childAt(d.childAt(value["__r_"]["__first_"], 0), 0)
|
base = d.addressOf(value)
|
||||||
size = int(inner["__size_"])
|
firstByte = d.extractByte(base)
|
||||||
alloc = int(inner["__cap_"])
|
if firstByte & 1:
|
||||||
data = d.pointerValue(inner["__data_"])
|
# Long/external.
|
||||||
|
data = d.dereference(base + 2 * d.ptrSize())
|
||||||
|
size = d.extractInt(base + d.ptrSize())
|
||||||
|
else:
|
||||||
|
# Short/internal.
|
||||||
|
size = firstByte / 2
|
||||||
|
data = base + 1
|
||||||
qdump_stringHelper(d, data, size, 1)
|
qdump_stringHelper(d, data, size, 1)
|
||||||
d.putType("std::string")
|
d.putType("std::string")
|
||||||
|
|
||||||
|
|
||||||
def qdump__std____1__wstring(d, value):
|
def qdump__std____1__wstring(d, value):
|
||||||
inner = d.childAt(d.childAt(value["__r_"]["__first_"], 0), 0)
|
base = d.addressOf(value)
|
||||||
size = int(inner["__size_"]) * 4
|
firstByte = d.extractByte(base)
|
||||||
alloc = int(inner["__cap_"])
|
if firstByte & 1:
|
||||||
data = d.pointerValue(inner["__data_"])
|
# Long/external.
|
||||||
qdump_stringHelper(d, data, size, 4)
|
data = d.dereference(base + 2 * d.ptrSize())
|
||||||
d.putType("std::wstring")
|
size = d.extractInt(base + d.ptrSize())
|
||||||
|
else:
|
||||||
|
# Short/internal.
|
||||||
|
size = firstByte / 2
|
||||||
|
data = base + 4
|
||||||
|
qdump_stringHelper(d, data, size * 4, 4)
|
||||||
|
d.putType("std::xxwstring")
|
||||||
|
|
||||||
|
|
||||||
def qdump__std__shared_ptr(d, value):
|
def qdump__std__shared_ptr(d, value):
|
||||||
@@ -628,30 +640,16 @@ def qform__std____1__unordered_map():
|
|||||||
return mapForms()
|
return mapForms()
|
||||||
|
|
||||||
def qdump__std____1__unordered_map(d, value):
|
def qdump__std____1__unordered_map(d, value):
|
||||||
n = toInteger(value["__table_"]["__p2_"]["__first_"])
|
n = int(value["__table_"]["__p2_"]["__first_"])
|
||||||
d.putItemCount(n)
|
d.putItemCount(n)
|
||||||
if d.isExpanded():
|
if d.isExpanded():
|
||||||
node = value["__table_"]["__p1_"]["__first_"]["__next_"]
|
node = value["__table_"]["__p1_"]["__first_"]["__next_"]
|
||||||
#pos = toInteger(value["__table_"]["__p2_"]["__first_"])
|
pairType = node["__value_"].type
|
||||||
#with Children(d, 1):
|
with PairedChildren(d, n, pairType, maxNumChild=1000):
|
||||||
# d.putFields(value)
|
for i in d.childRange():
|
||||||
keyType = d.templateArgument(value.type, 0)
|
|
||||||
valueType = d.templateArgument(value.type, 1)
|
|
||||||
isCompact = d.isMapCompact(keyType, valueType)
|
|
||||||
with Children(d, n, maxNumChild=1000, childType=valueType):
|
|
||||||
for i in xrange(n):
|
|
||||||
pair = node["__value_"]
|
|
||||||
#d.putSubItem(i, pair)
|
|
||||||
with SubItem(d, i):
|
with SubItem(d, i):
|
||||||
if isCompact:
|
pair = node["__value_"]
|
||||||
d.putMapName(pair["first"], i)
|
d.putPair(pair)
|
||||||
d.putItem(pair["second"])
|
|
||||||
else:
|
|
||||||
d.putEmptyValue()
|
|
||||||
if d.isExpanded():
|
|
||||||
with Children(d, 2):
|
|
||||||
d.putSubItem("first", pair["first"])
|
|
||||||
d.putSubItem("second", pair["second"])
|
|
||||||
node = node["__next_"]
|
node = node["__next_"]
|
||||||
|
|
||||||
def qdump__std____debug__unordered_set(d, value):
|
def qdump__std____debug__unordered_set(d, value):
|
||||||
@@ -792,6 +790,15 @@ def qdump__std__basic_string(d, value):
|
|||||||
innerType = d.templateArgument(value.type, 0)
|
innerType = d.templateArgument(value.type, 0)
|
||||||
qdump__std__stringHelper1(d, value, innerType.sizeof)
|
qdump__std__stringHelper1(d, value, innerType.sizeof)
|
||||||
|
|
||||||
|
def qdump__std____1__basic_string(d, value):
|
||||||
|
innerType = str(d.templateArgument(value.type, 0))
|
||||||
|
if innerType == "char":
|
||||||
|
qdump__std____1__string(d, value)
|
||||||
|
elif innerType == "wchar_t":
|
||||||
|
qdump__std____1__wstring(d, value)
|
||||||
|
else:
|
||||||
|
warn("UNKNOWN INNER TYPE %s" % innerType)
|
||||||
|
|
||||||
def qdump__wstring(d, value):
|
def qdump__wstring(d, value):
|
||||||
qdump__std__wstring(d, value)
|
qdump__std__wstring(d, value)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user