From d7c5ee7eddec23217912db1af02720d324612dcd Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 12 Aug 2015 09:05:28 +0200 Subject: [PATCH] Debugger: Fix display selection of char arrays ... by re-using the logic we had for std::string already. A plain char[] value did not react to Change Display Format, Latin1 was used unconditionally. Also rename putStdStringHelper to putCharArrayHelper. Change-Id: I01fdf796ff49a4c99ead7b9b46274684e18e962b Reviewed-by: Christian Stenger --- share/qtcreator/debugger/dumper.py | 18 +++++------------- share/qtcreator/debugger/gdbbridge.py | 2 +- share/qtcreator/debugger/stdtypes.py | 8 ++++---- 3 files changed, 10 insertions(+), 18 deletions(-) diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index 0e0acceb238..4ffdd7f0c7a 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -569,7 +569,7 @@ class DumperBase: elided, shown = self.computeLimit(size, limit) return elided, self.readMemory(data, shown) - def putStdStringHelper(self, data, size, charSize, displayFormat = AutomaticFormat): + def putCharArrayHelper(self, data, size, charSize, displayFormat = AutomaticFormat): bytelen = size * charSize elided, shown = self.computeLimit(bytelen, self.displayStringLimit) mem = self.readMemory(data, shown) @@ -917,18 +917,10 @@ class DumperBase: arrayByteSize = int(s[s.find('[')+1:s.find(']')]) * ts; n = int(arrayByteSize / ts) - if displayFormat != RawFormat: - if innerTypeName == "char": - # Use Latin1 as default for char []. - blob = self.readMemory(self.addressOf(value), arrayByteSize) - self.putValue(blob, Hex2EncodedLatin1) - elif innerTypeName == "wchar_t": - blob = self.readMemory(self.addressOf(value), arrayByteSize) - if innerType.sizeof == 2: - self.putValue(blob, Hex4EncodedLittleEndian) - else: - self.putValue(blob, Hex8EncodedLittleEndian) - elif p: + if displayFormat != RawFormat and p: + if innerTypeName == "char" or innerTypeName == "wchar_t": + self.putCharArrayHelper(p, n, ts, self.currentItemFormat()) + else: self.tryPutSimpleFormattedPointer(p, arrayType, innerTypeName, displayFormat, arrayByteSize) self.putNumChild(n) diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py index b2047d867bf..2a7cb770066 100644 --- a/share/qtcreator/debugger/gdbbridge.py +++ b/share/qtcreator/debugger/gdbbridge.py @@ -155,7 +155,7 @@ class PlainDumper: if isinstance(val, str): d.putValue(val) else: # Assuming LazyString - d.putStdStringHelper(val.address, val.length, val.type.sizeof) + d.putCharArrayHelper(val.address, val.length, val.type.sizeof) d.putNumChild(len(children)) if d.isExpanded(): diff --git a/share/qtcreator/debugger/stdtypes.py b/share/qtcreator/debugger/stdtypes.py index d37edc150a2..60c271ebcd6 100644 --- a/share/qtcreator/debugger/stdtypes.py +++ b/share/qtcreator/debugger/stdtypes.py @@ -419,7 +419,7 @@ def qdump__std__stringHelper1(d, value, charSize, format): refcount = int(sizePtr[-1]) & 0xffffffff d.check(refcount >= -1) # Can be -1 accoring to docs. d.check(0 <= size and size <= alloc and alloc <= 100*1000*1000) - d.putStdStringHelper(sizePtr, size, charSize, format) + d.putCharArrayHelper(sizePtr, size, charSize, format) def qdump__std__stringHelper1__QNX(d, value, charSize, format): size = value['_Mysize'] @@ -433,7 +433,7 @@ def qdump__std__stringHelper1__QNX(d, value, charSize, format): refcount = int(sizePtr[-1]) d.check(refcount >= -1) # Can be -1 accoring to docs. d.check(0 <= size and size <= alloc and alloc <= 100*1000*1000) - d.putStdStringHelper(sizePtr, size, charSize, format) + d.putCharArrayHelper(sizePtr, size, charSize, format) def qdump__std____1__string(d, value): @@ -447,7 +447,7 @@ def qdump__std____1__string(d, value): # Short/internal. size = firstByte / 2 data = base + 1 - d.putStdStringHelper(data, size, 1, d.currentItemFormat()) + d.putCharArrayHelper(data, size, 1, d.currentItemFormat()) d.putType("std::string") @@ -462,7 +462,7 @@ def qdump__std____1__wstring(d, value): # Short/internal. size = firstByte / 2 data = base + 4 - d.putStdStringHelper(data, size, 4) + d.putCharArrayHelper(data, size, 4) d.putType("std::xxwstring")