diff --git a/share/qtcreator/gdbmacros/gdbmacros.cpp b/share/qtcreator/gdbmacros/gdbmacros.cpp index 639a0d6500b8cec96f19d025733554659dd9c083..f9f73aae64422fde5f34fded7d4a00224c46bfa9 100644 --- a/share/qtcreator/gdbmacros/gdbmacros.cpp +++ b/share/qtcreator/gdbmacros/gdbmacros.cpp @@ -47,8 +47,11 @@ #include <QtCore/QObject> #include <QtCore/QPointer> #include <QtCore/QString> +#include <QtCore/QSharedPointer> +#include <QtCore/QSharedDataPointer> #include <QtCore/QTextCodec> #include <QtCore/QVector> +#include <QtCore/QWeakPointer> int qtGhVersion = QT_VERSION; @@ -1931,6 +1934,30 @@ static void qDumpQSet(QDumper &d) d.disarm(); } +static void qDumpQSharedPointer(QDumper &d) +{ + const QSharedPointer<int> &ptr = + *reinterpret_cast<const QSharedPointer<int> *>(d.data); + + if (isSimpleType(d.innertype)) + qDumpInnerValueHelper(d, d.innertype, ptr.data()); + else + P(d, "value", ""); + P(d, "valuedisabled", "true"); + P(d, "numchild", 1); + if (d.dumpChildren) { + d << ",children=["; + d.beginHash(); + P(d, "name", "data"); + qDumpInnerValue(d, d.innertype, ptr.data()); + d.endHash(); + I(d, "strongref", 44); + I(d, "weakref", 45); + d << "]"; + } + d.disarm(); +} + static void qDumpQString(QDumper &d) { const QString &str = *reinterpret_cast<const QString *>(d.data); @@ -2480,6 +2507,8 @@ static void handleProtocolVersion2and3(QDumper & d) case 'S': if (isEqual(type, "QSet")) qDumpQSet(d); + else if (isEqual(type, "QSharedPointer")) + qDumpQSharedPointer(d); else if (isEqual(type, "QString")) qDumpQString(d); else if (isEqual(type, "QStringList")) @@ -2578,6 +2607,7 @@ void *qDumpObjectData440( #endif // PRIVATE_OBJECT_ALLOWED // << "\""NS"QRegion\"," "\""NS"QSet\"," + "\""NS"QSharedPointer\"," "\""NS"QString\"," "\""NS"QStringList\"," "\""NS"QTextCodec\"," diff --git a/tests/manual/gdbdebugger/simple/app.cpp b/tests/manual/gdbdebugger/simple/app.cpp index 9c5c007a4b95c9ed4a9931aeab6ca5f2ec686427..608198bb28de4f70d4631c920790b70ff9fa909c 100644 --- a/tests/manual/gdbdebugger/simple/app.cpp +++ b/tests/manual/gdbdebugger/simple/app.cpp @@ -538,8 +538,20 @@ public: void testQSharedPointer() { - Employee e1(1, "Herbert"); - Employee e2 = e1; + //Employee e1(1, "Herbert"); + //Employee e2 = e1; + + QSharedPointer<int> iptr(new int(43)); + QSharedPointer<int> iptr2 = iptr; + QSharedPointer<int> iptr3 = iptr; + + QSharedPointer<QString> ptr(new QString("hallo")); + QSharedPointer<QString> ptr2 = ptr; + QSharedPointer<QString> ptr3 = ptr; + + //QWeakPointer<QString> wptr(ptr); + //QWeakPointer<QString> wptr2 = wptr; + //QWeakPointer<QString> wptr3 = wptr; } void stringRefTest(const QString &refstring)