diff --git a/share/qtcreator/gdbmacros/gdbmacros.py b/share/qtcreator/gdbmacros/gdbmacros.py index 9ccc1c54b003c512a82d424d5f44dad5e8164dd5..41ae51b588875cec8a1b6608d971f26b73a309e7 100644 --- a/share/qtcreator/gdbmacros/gdbmacros.py +++ b/share/qtcreator/gdbmacros/gdbmacros.py @@ -397,9 +397,9 @@ def qdump__QList(d, item): # in the frontend. # So as first approximation only do the 'isLarge' check: isInternal = innerSize <= d_ptr.type.sizeof and d.isMovableType(innerType) - #warn("INTERNAL: %d" % int(isInternal)) - - p = gdb.Value(array).cast(innerType.pointer()) + begin + dummyType = gdb.lookup_type("void").pointer().pointer() + innerTypePointer = innerType.pointer() + p = gdb.Value(array).cast(dummyType) + begin if innerTypeIsPointer: inner = innerType.target() else: @@ -408,10 +408,11 @@ def qdump__QList(d, item): with Children(d, [size, 2000], inner): for i in d.childRange(): if isInternal: - d.putItem(Item(p.dereference(), item.iname, i)) + pp = p.cast(innerTypePointer).dereference(); + d.putItem(Item(pp, item.iname, i)) else: - pp = p.cast(innerType.pointer().pointer()).dereference() - d.putItem(Item(pp.dereference(), item.iname, i)) + pp = p.cast(innerTypePointer.pointer()).dereference() + d.putItem(Item(pp, item.iname, i)) p += 1 diff --git a/tests/manual/gdbdebugger/simple/app.cpp b/tests/manual/gdbdebugger/simple/app.cpp index 778e8b61f6ead6ee34dd8319c3ed80afa9037d88..464e18b7365a223f8613764039f42c7ad119f719 100644 --- a/tests/manual/gdbdebugger/simple/app.cpp +++ b/tests/manual/gdbdebugger/simple/app.cpp @@ -1296,6 +1296,14 @@ void testQVariant2() void testQVariant3() { + QVariantList vl; + vl.append(QVariant(1)); + vl.append(QVariant(2)); + vl.append(QVariant("Some String")); + vl.append(QVariant(21)); + vl.append(QVariant(22)); + vl.append(QVariant("2Some String")); + QList<int> list; list << 1 << 2 << 3; QVariant variant = qVariantFromValue(list);