diff --git a/plugins/gdb/printers/qt.py b/plugins/gdb/printers/qt.py --- a/plugins/gdb/printers/qt.py +++ b/plugins/gdb/printers/qt.py @@ -136,23 +136,19 @@ return ('[%d]' % count, value.cast(self.nodetype.pointer()).dereference()) def __init__(self, val, container, itype): - self.val = val + self.d = val['d'] self.container = container + self.size = self.d['end'] - self.d['begin'] if itype == None: - self.itype = self.val.type.template_argument(0) + self.itype = val.type.template_argument(0) else: self.itype = gdb.lookup_type(itype) def children(self): - return self._iterator(self.itype, self.val['d']) + return self._iterator(self.itype, self.d) def to_string(self): - if self.val['d']['end'] == self.val['d']['begin']: - empty = "empty " - else: - empty = "" - - return "%s%s<%s>" % ( empty, self.container, self.itype ) + return "%s<%s> (size = %s)" % ( self.container, self.itype, self.size ) class QVectorPrinter: "Print a QVector" @@ -189,12 +185,9 @@ return self._iterator(self.itype, data.cast(self.itype.pointer()), self.val['d']['size']) def to_string(self): - if self.val['d']['size'] == 0: - empty = "empty " - else: - empty = "" + size = self.val['d']['size'] - return "%s%s<%s>" % ( empty, self.container, self.itype ) + return "%s<%s> (size = %s)" % ( self.container, self.itype, size ) class QLinkedListPrinter: "Print a QLinkedList" @@ -227,12 +220,9 @@ return self._iterator(self.itype, self.val['e']['n'], self.val['d']['size']) def to_string(self): - if self.val['d']['size'] == 0: - empty = "empty " - else: - empty = "" + size = self.val['d']['size'] - return "%sQLinkedList<%s>" % ( empty, self.itype ) + return "QLinkedList<%s> (size = %s)" % ( self.itype, size ) class QMapPrinter: "Print a QMap" @@ -367,12 +357,9 @@ return self._iteratorQt5(self.val) def to_string(self): - if self.val['d']['size'] == 0: - empty = "empty " - else: - empty = "" + size = self.val['d']['size'] - return "%s%s<%s, %s>" % ( empty, self.container, self.val.type.template_argument(0), self.val.type.template_argument(1) ) + return "%s<%s, %s> (size = %s)" % ( self.container, self.val.type.template_argument(0), self.val.type.template_argument(1), size ) def display_hint (self): return 'map' @@ -477,12 +464,9 @@ return self._iterator(self.val) def to_string(self): - if self.val['d']['size'] == 0: - empty = "empty " - else: - empty = "" + size = self.val['d']['size'] - return "%s%s<%s, %s>" % ( empty, self.container, self.val.type.template_argument(0), self.val.type.template_argument(1) ) + return "%s<%s, %s> (size = %s)" % ( self.container, self.val.type.template_argument(0), self.val.type.template_argument(1), size ) def display_hint (self): return 'map' @@ -666,12 +650,9 @@ return self._iterator(hashIterator) def to_string(self): - if self.val['q_hash']['d']['size'] == 0: - empty = "empty " - else: - empty = "" + size = self.val['q_hash']['d']['size'] - return "%sQSet<%s>" % ( empty , self.val.type.template_argument(0) ) + return "QSet<%s> (size = %s)" % ( self.val.type.template_argument(0), size ) class QCharPrinter: diff --git a/plugins/gdb/unittests/test_gdbprinters.cpp b/plugins/gdb/unittests/test_gdbprinters.cpp --- a/plugins/gdb/unittests/test_gdbprinters.cpp +++ b/plugins/gdb/unittests/test_gdbprinters.cpp @@ -145,10 +145,10 @@ gdb.execute("cont"); QByteArray out = gdb.execute("print intList"); qWarning() << "FOO" << out; - QVERIFY(out.contains(QString("empty %1").arg(container).toLocal8Bit())); + QVERIFY(out.contains(QString("%1 (size = 0)").arg(container).toLocal8Bit())); gdb.execute("next"); out = gdb.execute("print intList"); - QVERIFY(out.contains(QString("%1").arg(container).toLocal8Bit())); + QVERIFY(out.contains(QString("%1 (size = 2)").arg(container).toLocal8Bit())); if (container != QLatin1String("QSet")) { QVERIFY(out.contains("[0] = 10")); QVERIFY(out.contains("[1] = 20")); @@ -160,7 +160,7 @@ } gdb.execute("next"); out = gdb.execute("print intList"); - QVERIFY(out.contains(QString("%1").arg(container).toLocal8Bit())); + QVERIFY(out.contains(QString("%1 (size = 3)").arg(container).toLocal8Bit())); if (container != QLatin1String("QSet")) { QVERIFY(out.contains("[0] = 10")); QVERIFY(out.contains("[1] = 20")); @@ -174,10 +174,10 @@ { // gdb.execute("next"); QByteArray out = gdb.execute("print stringList"); - QVERIFY(out.contains(QString("empty %1").arg(container).toLocal8Bit())); + QVERIFY(out.contains(QString("%1 (size = 0)").arg(container).toLocal8Bit())); gdb.execute("next"); out = gdb.execute("print stringList"); - QVERIFY(out.contains(QString("%1").arg(container).toLocal8Bit())); + QVERIFY(out.contains(QString("%1 (size = 2)").arg(container).toLocal8Bit())); if (container != QLatin1String("QSet")) { QVERIFY(out.contains("[0] = \"a\"")); QVERIFY(out.contains("[1] = \"bc\"")); @@ -189,7 +189,7 @@ } gdb.execute("next"); out = gdb.execute("print stringList"); - QVERIFY(out.contains(QString("%1").arg(container).toLocal8Bit())); + QVERIFY(out.contains(QString("%1 (size = 3)").arg(container).toLocal8Bit())); if (container != QLatin1String("QSet")) { QVERIFY(out.contains("[0] = \"a\"")); QVERIFY(out.contains("[1] = \"bc\"")); @@ -203,44 +203,45 @@ { // gdb.execute("next"); QByteArray out = gdb.execute("print structList"); - QVERIFY(out.contains(QString("empty %1").arg(container).toLocal8Bit())); + QVERIFY(out.contains(QString("%1 (size = 0)").arg(container).toLocal8Bit())); gdb.execute("next"); out = gdb.execute("print structList"); - QVERIFY(out.contains(QString("%1").arg(container).toLocal8Bit())); + QVERIFY(out.contains(QString("%1 (size = 1)").arg(container).toLocal8Bit())); QVERIFY(out.contains("[0] = {")); QVERIFY(out.contains("a = \"a\"")); QVERIFY(out.contains("b = \"b\"")); QVERIFY(out.contains("c = 100")); QVERIFY(out.contains("d = -200")); gdb.execute("next"); out = gdb.execute("print structList"); - QVERIFY(out.contains(QString("%1").arg(container).toLocal8Bit())); + QVERIFY(out.contains(QString("%1 (size = 2)").arg(container).toLocal8Bit())); QVERIFY(out.contains("[1] = {")); } { // gdb.execute("next"); QByteArray out = gdb.execute("print pointerList"); - QVERIFY(out.contains(QString("empty %1").arg(container).toLocal8Bit())); + QVERIFY(out.contains(QString("%1 (size = 0)").arg(container).toLocal8Bit())); gdb.execute("next"); out = gdb.execute("print pointerList"); - QVERIFY(out.contains(QString("%1").arg(container).toLocal8Bit())); + QVERIFY(out.contains(QString("%1 (size = 2)").arg(container).toLocal8Bit())); QVERIFY(out.contains("[0] = 0x")); QVERIFY(out.contains("[1] = 0x")); QVERIFY(!out.contains("[2] = 0x")); gdb.execute("next"); out = gdb.execute("print pointerList"); + QVERIFY(out.contains(QString("%1 (size = 3)").arg(container).toLocal8Bit())); QVERIFY(out.contains("[0] = 0x")); QVERIFY(out.contains("[1] = 0x")); QVERIFY(out.contains("[2] = 0x")); gdb.execute("next"); } { // > gdb.execute("next"); QByteArray out = gdb.execute("print pairList"); - QVERIFY(out.contains(QString("empty %1>").arg(container).toLocal8Bit())); + QVERIFY(out.contains(QString("%1> (size = 0)").arg(container).toLocal8Bit())); gdb.execute("next"); out = gdb.execute("print pairList"); - QVERIFY(out.contains(QString("%1>").arg(container).toLocal8Bit())); + QVERIFY(out.contains(QString("%1> (size = 2)").arg(container).toLocal8Bit())); if (container != QLatin1String("QSet")) { QVERIFY(out.contains("[0] = {\n first = 1, \n second = 2\n }")); QVERIFY(out.contains("[1] = {\n first = 2, \n second = 3\n }")); @@ -251,6 +252,7 @@ QVERIFY(!out.contains("[2] = ")); gdb.execute("next"); out = gdb.execute("print pairList"); + QVERIFY(out.contains(QString("%1> (size = 3)").arg(container).toLocal8Bit())); if (container != QLatin1String("QSet")) { QVERIFY(out.contains("[0] = {\n first = 1, \n second = 2\n }")); QVERIFY(out.contains("[1] = {\n first = 2, \n second = 3\n }")); @@ -269,11 +271,12 @@ gdb.execute("break qmapint.cpp:7"); gdb.execute("run"); QByteArray out = gdb.execute("print m"); - QVERIFY(out.contains("QMap")); + QVERIFY(out.contains("QMap (size = 2)")); QVERIFY(out.contains("[10] = 100")); QVERIFY(out.contains("[20] = 200")); gdb.execute("next"); out = gdb.execute("print m"); + QVERIFY(out.contains("QMap (size = 3)")); QVERIFY(out.contains("[30] = 300")); } @@ -283,11 +286,12 @@ gdb.execute("break qmapstring.cpp:8"); gdb.execute("run"); QByteArray out = gdb.execute("print m"); - QVERIFY(out.contains("QMap")); + QVERIFY(out.contains("QMap (size = 2)")); QVERIFY(out.contains("[\"10\"] = \"100\"")); QVERIFY(out.contains("[\"20\"] = \"200\"")); gdb.execute("next"); out = gdb.execute("print m"); + QVERIFY(out.contains("QMap (size = 3)")); QVERIFY(out.contains("[\"30\"] = \"300\"")); } @@ -297,11 +301,12 @@ gdb.execute("break qmapstringbool.cpp:8"); gdb.execute("run"); QByteArray out = gdb.execute("print m"); - QVERIFY(out.contains("QMap")); + QVERIFY(out.contains("QMap (size = 2)")); QVERIFY(out.contains("[\"10\"] = true")); QVERIFY(out.contains("[\"20\"] = false")); gdb.execute("next"); out = gdb.execute("print m"); + QVERIFY(out.contains("QMap (size = 3)")); QVERIFY(out.contains("[\"30\"] = true")); } @@ -348,10 +353,12 @@ gdb.execute("break qhashint.cpp:7"); gdb.execute("run"); QByteArray out = gdb.execute("print h"); + QVERIFY(out.contains("QHash (size = 2)")); QVERIFY(out.contains("[10] = 100")); QVERIFY(out.contains("[20] = 200")); gdb.execute("next"); out = gdb.execute("print h"); + QVERIFY(out.contains("QHash (size = 3)")); QVERIFY(out.contains("[30] = 300")); } @@ -361,10 +368,12 @@ gdb.execute("break qhashstring.cpp:8"); gdb.execute("run"); QByteArray out = gdb.execute("print h"); + QVERIFY(out.contains("QHash (size = 2)")); QVERIFY(out.contains("[\"10\"] = \"100\"")); QVERIFY(out.contains("[\"20\"] = \"200\"")); gdb.execute("next"); out = gdb.execute("print h"); + QVERIFY(out.contains("QHash (size = 3)")); QVERIFY(out.contains("[\"30\"] = \"300\"")); } @@ -374,10 +383,12 @@ gdb.execute("break qsetint.cpp:7"); gdb.execute("run"); QByteArray out = gdb.execute("print s"); + QVERIFY(out.contains("QSet (size = 2)")); QVERIFY(out.contains("] = 10")); QVERIFY(out.contains("] = 20")); gdb.execute("next"); out = gdb.execute("print s"); + QVERIFY(out.contains("QSet (size = 3)")); QVERIFY(out.contains("] = 30")); } @@ -387,10 +398,12 @@ gdb.execute("break qsetstring.cpp:8"); gdb.execute("run"); QByteArray out = gdb.execute("print s"); + QVERIFY(out.contains("QSet (size = 2)")); QVERIFY(out.contains("] = \"10\"")); QVERIFY(out.contains("] = \"20\"")); gdb.execute("next"); out = gdb.execute("print s"); + QVERIFY(out.contains("QSet (size = 3)")); QVERIFY(out.contains("] = \"30\"")); }