From b889bb1608badceed0dc1175f3322ea8015f8924 Mon Sep 17 00:00:00 2001 From: hjk <hjk121@nokiamail.com> Date: Wed, 23 Oct 2013 19:12:00 +0200 Subject: [PATCH] Debugger: Make QRegion dumper more independent of debuginfo Change-Id: I332e17cd4c6a167d273f31f4e7ff63c149a5d34b Reviewed-by: hjk <hjk121@nokiamail.com> --- share/qtcreator/debugger/qttypes.py | 39 ++++++++++++++++++++--------- tests/auto/debugger/tst_dumpers.cpp | 6 ++--- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py index 723a0e35d6e..a80986ef744 100644 --- a/share/qtcreator/debugger/qttypes.py +++ b/share/qtcreator/debugger/qttypes.py @@ -1465,19 +1465,34 @@ def qdump__QRegion(d, value): d.putValue("<empty>") d.putNumChild(0) else: - try: - # Fails without debug info. - n = int(p.dereference()["numRects"]) - d.putItemCount(n) - d.putNumChild(n) - d.putPlainChildren(p.dereference()) - except: - warn("NO DEBUG INFO") - d.putValue(p) - d.putPlainChildren(value) + # struct QRegionPrivate: + # int numRects; + # QVector<QRect> rects; + # QRect extents; + # QRect innerRect; + # int innerArea; + pp = d.dereferenceValue(p) + n = d.extractInt(pp) + d.putItemCount(n) + d.putNumChild(n) + if d.isExpanded(): + with Children(d): + v = d.ptrSize() + rectType = d.lookupType(d.ns + "QRect") + d.putIntItem("numRects", n) + d.putSubItem("extents", d.createValue(pp + 2 * v, rectType)) + d.putSubItem("innerRect", d.createValue(pp + 2 * v + rectType.sizeof, rectType)) + # FIXME + try: + # Can fail if QVector<QRect> debuginfo is missing. + vectType = d.lookupType("%sQVector<%sQRect>" % (d.ns, d.ns)) + d.putSubItem("rects", d.createValue(pp + v, vectType)) + except: + with SubItem(d, "rects"): + d.putItemCount(n) + d.putType("%sQVector<%sQRect>" % (d.ns, d.ns)) + d.putNumChild(0) -# qt_rgn might be 0 -# gdb.parse_and_eval("region")["d"].dereference()["qt_rgn"].dereference() def qdump__QScopedPointer(d, value): d.putBetterType(d.currentType) diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index 1b5412d2bfe..0bcb04d4975 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -2244,9 +2244,7 @@ void tst_Dumpers::dumper_data() % Check("s", "(100.5, 200.5)", "@QSizeF"); QTest::newRow("QRegion") - << Data("#include <QRegion>\n" - "#include <QString> // Dummy for namespace\n", - "QString dummy;\n" + << Data("#include <QRegion>\n", "QRegion region, region0, region1, region2;\n" "region0 = region;\n" "region += QRect(100, 100, 200, 200);\n" @@ -2262,7 +2260,7 @@ void tst_Dumpers::dumper_data() % Check("region1.innerArea", "40000", "int") % Check("region1.innerRect", "200x200+100+100", "@QRect") % Check("region1.numRects", "1", "int") - % Check("region1.rects", "<0 items>", "@QVector<@QRect>") + % Check("region1.rects", "<1 items>", "@QVector<@QRect>") % Check("region2", "<2 items>", "@QRegion") % Check("region2.extents", "600x700+100+100", "@QRect") % Check("region2.innerArea", "200000", "int") -- GitLab