forked from qt-creator/qt-creator
Debugger: Consolidate some string data extraction helper functions
Change-Id: Icfa395de5237e0f58e63b3ca0d88ff8c9a1998a9 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -575,9 +575,9 @@ class DumperBase():
|
|||||||
|
|
||||||
def qArrayData(self, value):
|
def qArrayData(self, value):
|
||||||
if self.qtVersion() >= 0x60000:
|
if self.qtVersion() >= 0x60000:
|
||||||
dd, data, size = self.split('ppi', value)
|
dd, data, size = self.split('ppp', value)
|
||||||
if dd:
|
if dd:
|
||||||
alloc, i, i = self.split('Pii', dd)
|
_, _, alloc = self.split('iip', dd)
|
||||||
else: # fromRawData
|
else: # fromRawData
|
||||||
alloc = size
|
alloc = size
|
||||||
return data, size, alloc
|
return data, size, alloc
|
||||||
@@ -620,18 +620,12 @@ class DumperBase():
|
|||||||
data = self.extractPointer(array_data_ptr + self.ptrSize())
|
data = self.extractPointer(array_data_ptr + self.ptrSize())
|
||||||
return data, size, alloc
|
return data, size, alloc
|
||||||
|
|
||||||
# addr is the begin of a QByteArrayData structure
|
|
||||||
def encodeStringHelper(self, value, limit):
|
def encodeStringHelper(self, value, limit):
|
||||||
addr = self.extractPointer(value)
|
|
||||||
# Should not happen, but we get it with LLDB as result
|
|
||||||
# of inferior calls
|
|
||||||
if addr == 0:
|
|
||||||
return 0, ''
|
|
||||||
data, size, alloc = self.qArrayData(value)
|
data, size, alloc = self.qArrayData(value)
|
||||||
if alloc != 0:
|
if alloc != 0:
|
||||||
self.check(0 <= size and size <= alloc and alloc <= 100 * 1000 * 1000)
|
self.check(0 <= size and size <= alloc and alloc <= 100 * 1000 * 1000)
|
||||||
elided, shown = self.computeLimit(size, limit)
|
elided, shown = self.computeLimit(2 * size, 2 * limit)
|
||||||
return elided, self.readMemory(data, 2 * shown)
|
return elided, self.readMemory(data, shown)
|
||||||
|
|
||||||
def encodeByteArrayHelper(self, value, limit):
|
def encodeByteArrayHelper(self, value, limit):
|
||||||
data, size, alloc = self.qArrayData(value)
|
data, size, alloc = self.qArrayData(value)
|
||||||
@@ -692,16 +686,8 @@ class DumperBase():
|
|||||||
self.putValue(data, 'latin1', elided=elided)
|
self.putValue(data, 'latin1', elided=elided)
|
||||||
|
|
||||||
def encodeString(self, value, limit=0):
|
def encodeString(self, value, limit=0):
|
||||||
if self.qtVersion() >= 0x60000:
|
elided, data = self.encodeStringHelper(value, limit)
|
||||||
dd, ptr, size = self.split('ppi', value)
|
return data
|
||||||
if not dd:
|
|
||||||
return ""
|
|
||||||
elided, shown = self.computeLimit(2 * size, 2 * self.displayStringLimit)
|
|
||||||
data = self.readMemory(ptr, shown)
|
|
||||||
return data
|
|
||||||
else:
|
|
||||||
elided, data = self.encodeStringHelper(value, limit)
|
|
||||||
return data
|
|
||||||
|
|
||||||
def encodedUtf16ToUtf8(self, s):
|
def encodedUtf16ToUtf8(self, s):
|
||||||
return ''.join([chr(int(s[i:i + 2], 16)) for i in range(0, len(s), 4)])
|
return ''.join([chr(int(s[i:i + 2], 16)) for i in range(0, len(s), 4)])
|
||||||
@@ -746,14 +732,8 @@ class DumperBase():
|
|||||||
return inner
|
return inner
|
||||||
|
|
||||||
def putStringValue(self, value):
|
def putStringValue(self, value):
|
||||||
if self.qtVersion() >= 0x60000:
|
elided, data = self.encodeStringHelper(value, self.displayStringLimit)
|
||||||
dd, ptr, size = self.split('ppi', value)
|
self.putValue(data, 'utf16', elided=elided)
|
||||||
elided, shown = self.computeLimit(2 * size, 2 * self.displayStringLimit)
|
|
||||||
data = self.readMemory(ptr, shown)
|
|
||||||
self.putValue(data, 'utf16', elided=elided)
|
|
||||||
else:
|
|
||||||
elided, data = self.encodeStringHelper(value, self.displayStringLimit)
|
|
||||||
self.putValue(data, 'utf16', elided=elided)
|
|
||||||
|
|
||||||
def putPtrItem(self, name, value):
|
def putPtrItem(self, name, value):
|
||||||
with SubItem(self, name):
|
with SubItem(self, name):
|
||||||
|
Reference in New Issue
Block a user