aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2016-11-16 11:29:57 +0100
committerhjk <hjk@qt.io>2016-11-16 13:34:04 +0000
commit82818cb90bde1dcc4dd1fa6c0c2c9608e61429c2 (patch)
treefa01e0066bea400de4f398c1e8bbd766242fbe3b
parentab16549024c67f55f61e1c2f2d4b8a9f5e48b37a (diff)
Debugger: Improve QAtomicPointer dumper
More compact display and arbitrary inner types. Change-Id: I68bc1f5cc88f51e993e6e8a91556d9d745a2574a Reviewed-by: Christian Stenger <christian.stenger@qt.io>
-rw-r--r--share/qtcreator/debugger/qttypes.py10
-rw-r--r--tests/auto/debugger/tst_dumpers.cpp25
2 files changed, 28 insertions, 7 deletions
diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py
index ed94f51ad3..65f4e1fbdd 100644
--- a/share/qtcreator/debugger/qttypes.py
+++ b/share/qtcreator/debugger/qttypes.py
@@ -38,13 +38,9 @@ def qdump__QBasicAtomicInt(d, value):
def qdump__QAtomicPointer(d, value):
- d.putType(value.type)
- p = value.extractPointer()
- d.putValue('@0x%x' % p)
- d.putNumChild(1 if p else 0)
- if d.isExpanded():
- with Children(d):
- d.putSubItem('[pointee]', value.dereference())
+ d.putItem(value.cast(value.type[0].pointer()))
+ d.putBetterType(value.type)
+
def qform__QByteArray():
return [Latin1StringFormat, SeparateLatin1StringFormat,
diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp
index 5bf80148b6..0c78e88ff6 100644
--- a/tests/auto/debugger/tst_dumpers.cpp
+++ b/tests/auto/debugger/tst_dumpers.cpp
@@ -2935,6 +2935,31 @@ void tst_Dumpers::dumper_data()
" QSharedDataPointer<EmployeeData> d;\n"
" };\n";
+ QTest::newRow("QAtomicPointer")
+ << Data("#include <QAtomicPointer>\n"
+ "#include <QStringList>\n\n"
+ "template <class T> struct Pointer : QAtomicPointer<T> {\n"
+ " Pointer(T *value = 0) : QAtomicPointer<T>(value) {}\n"
+ "};\n\n"
+ "struct SomeStruct {\n"
+ " int a = 1;\n"
+ " long b = 2;\n"
+ " double c = 3.0;\n"
+ " QString d = \"4\";\n"
+ " QList<QString> e = {\"5\", \"6\" };\n"
+ "};\n\n"
+ "typedef Pointer<SomeStruct> SomeStructPointer;\n\n",
+
+ "SomeStruct *s = new SomeStruct; unused(s);\n"
+ "SomeStructPointer p(s); unused(p);\n"
+ "Pointer<SomeStruct> pp(s); unused(pp);\n"
+ "QAtomicPointer<SomeStruct> ppp(s); unused(ppp);\n")
+ + Cxx11Profile()
+ + Check("p.@1.a", "1", "int")
+ + Check("p.@1.e", "<2 items>", "@QList<@QString>")
+ + Check("pp.@1.a", "1", "int")
+ + Check("ppp.a", "1", "int");
+
QTest::newRow("QScopedPointer")
<< Data("#include <QScopedPointer>\n"