From 1baca8e797d4373c96ac7bb2e091741da1c26670 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 10 Oct 2014 12:05:47 +0200 Subject: [PATCH] Debugger: Add dumper for Qt3's (sic!) QString Change-Id: I24d266587425a5c50ec3dcb548a29877730cbdff Reviewed-by: Christian Stenger --- share/qtcreator/debugger/dumper.py | 11 ++++++++++- share/qtcreator/debugger/gdbbridge.py | 10 +++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index aacb17526b8..a16953f6ca6 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -449,7 +449,7 @@ class DumperBase: data = data & 0xffffffff else: data = data & 0xffffffffffffffff - else: + elif self.qtVersion() >= 0x040000: # Data: # - QBasicAtomicInt ref; # - int alloc, size; @@ -458,6 +458,15 @@ class DumperBase: alloc = self.extractInt(addr + 4) size = self.extractInt(addr + 8) data = self.extractPointer(addr + 8 + self.ptrSize()) + else: + # Data: + # - QShared count; + # - QChar *unicode + # - char *ascii + # - uint len: 30 + size = self.extractInt(addr + 3 * self.ptrSize()) & 0x3ffffff + alloc = size # pretend. + data = self.extractPointer(addr + self.ptrSize()) return data, size, alloc # addr is the begin of a QByteArrayData structure diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py index 648d21febd7..a58b77357e8 100644 --- a/share/qtcreator/debugger/gdbbridge.py +++ b/share/qtcreator/debugger/gdbbridge.py @@ -1501,8 +1501,16 @@ class Dumper(DumperBase): pass try: - # Seemingly needed with Debian's GDB 7.4.1 + # Last fall backs. s = gdb.execute("ptype QByteArray", to_string=True) + if s.find("QMemArray") >= 0: + # Qt 3. + self.qtNamespaceToReport = "" + self.qtNamespace = lambda: "" + self.qtVersion = lambda: 0x30308 + self.fallbackQtVersion = 0x30308 + return "" + # Seemingly needed with Debian's GDB 7.4.1 ns = s[s.find("class")+6:s.find("QByteArray")] if len(ns): self.qtNamespaceToReport = ns