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)