forked from qt-creator/qt-creator
Debugger: Fix expansion of std::string et al
The objects have been reported as 'having children', but when asked for them nothing was produced, leading to an endless loop (until the next 'step' command). Change-Id: I3bbfe10a7ed980b27a5fca1edfe44dd8983b8f7b Reviewed-by: Christian Stenger <christian.stenger@theqtcompany.com>
This commit is contained in:
@@ -569,7 +569,9 @@ class DumperBase:
|
|||||||
elided, shown = self.computeLimit(size, limit)
|
elided, shown = self.computeLimit(size, limit)
|
||||||
return elided, self.readMemory(data, shown)
|
return elided, self.readMemory(data, shown)
|
||||||
|
|
||||||
def putCharArrayHelper(self, data, size, charSize, displayFormat = AutomaticFormat):
|
def putCharArrayHelper(self, data, size, charSize,
|
||||||
|
displayFormat = AutomaticFormat,
|
||||||
|
makeExpandable = True):
|
||||||
bytelen = size * charSize
|
bytelen = size * charSize
|
||||||
elided, shown = self.computeLimit(bytelen, self.displayStringLimit)
|
elided, shown = self.computeLimit(bytelen, self.displayStringLimit)
|
||||||
mem = self.readMemory(data, shown)
|
mem = self.readMemory(data, shown)
|
||||||
@@ -595,6 +597,13 @@ class DumperBase:
|
|||||||
elided, shown = self.computeLimit(bytelen, 100000)
|
elided, shown = self.computeLimit(bytelen, 100000)
|
||||||
self.putField("editvalue", self.readMemory(data, shown))
|
self.putField("editvalue", self.readMemory(data, shown))
|
||||||
|
|
||||||
|
if makeExpandable:
|
||||||
|
self.putNumChild(size)
|
||||||
|
if self.isExpanded():
|
||||||
|
with Children(self):
|
||||||
|
for i in range(size):
|
||||||
|
self.putSubItem(size, data[i])
|
||||||
|
|
||||||
def readMemory(self, addr, size):
|
def readMemory(self, addr, size):
|
||||||
data = self.extractBlob(addr, size).toBytes()
|
data = self.extractBlob(addr, size).toBytes()
|
||||||
return self.hexencode(data)
|
return self.hexencode(data)
|
||||||
@@ -1010,7 +1019,8 @@ class DumperBase:
|
|||||||
n = int(arrayByteSize / ts)
|
n = int(arrayByteSize / ts)
|
||||||
if displayFormat != RawFormat and p:
|
if displayFormat != RawFormat and p:
|
||||||
if innerTypeName == "char" or innerTypeName == "wchar_t":
|
if innerTypeName == "char" or innerTypeName == "wchar_t":
|
||||||
self.putCharArrayHelper(p, n, ts, self.currentItemFormat())
|
self.putCharArrayHelper(p, n, ts, self.currentItemFormat(),
|
||||||
|
makeExpandable = False)
|
||||||
else:
|
else:
|
||||||
self.tryPutSimpleFormattedPointer(p, arrayType, innerTypeName,
|
self.tryPutSimpleFormattedPointer(p, arrayType, innerTypeName,
|
||||||
displayFormat, arrayByteSize)
|
displayFormat, arrayByteSize)
|
||||||
|
Reference in New Issue
Block a user