diff --git a/tests/auto/debugger/main.cpp b/tests/auto/debugger/main.cpp
index 9401ab48d1bb06aee9b93f502ad2a6d255b69652..56df0ca51c505bcfbe46f62fb7def5c7df7891db 100644
--- a/tests/auto/debugger/main.cpp
+++ b/tests/auto/debugger/main.cpp
@@ -1731,41 +1731,79 @@ void tst_Debugger::dumpQPixmap()
 template<typename T>
 void tst_Debugger::dumpQSharedPointerHelper(QSharedPointer<T> &ptr)
 {
-#if 0
-    QByteArray expected("value = '");
-    QString val = ptr.isNull() ? "<null>" : valToString(*ptr.data());
-    QAtomicInt *weakAddr;
-    QAtomicInt *strongAddr;
+    struct Cheater : public QSharedPointer<T>
+    {
+        static const typename QSharedPointer<T>::Data *getData(const QSharedPointer<T> &p)
+        {
+            return static_cast<const Cheater &>(p).d;
+        }
+    };
+
+    T dummy;
+    QByteArray expected("value='");
+    QString val1 = ptr.isNull() ? "<null>" : valToString(*ptr.data());
+    QString val2 = isSimpleType(dummy) ? val1 : "";
+    const QAtomicInt *weakAddr;
+    const QAtomicInt *strongAddr;
     int weakValue;
     int strongValue;
     if (!ptr.isNull()) {
-        weakAddr = &ptr.d->weakref;
-        strongAddr = &ptr.d->strongref;
+        weakAddr = &Cheater::getData(ptr)->weakref;
+        strongAddr = &Cheater::getData(ptr)->strongref;
         weakValue = *weakAddr;
         strongValue = *strongAddr;
     } else {
         weakAddr = strongAddr = 0;
         weakValue = strongValue = 0;
     }
-    expected.append("',valuedisabled='true',numchild='1',children=[").
+    expected.append(val2).append("',valuedisabled='true',numchild='1',children=[").
         append("{name='data',addr='").append(ptrToBa(ptr.data())).
-        append("',type='int',value='").append(val).append("'},").
-        append("{name='weakref',value='").append(QString::number(weakValue)).
+        append("',type='").append(typeToString(dummy)).append("',value='").append(val1).
+        append("'},{name='weakref',value='").append(QString::number(weakValue)).
         append("',type='int',addr='").append(ptrToBa(weakAddr)).append("',numchild='0'},").
-        append("{name='data',value='").append(val).append("'},").
         append("{name='strongref',value='").append(QString::number(strongValue)).
         append("',type='int',addr='").append(ptrToBa(strongAddr)).append("',numchild='0'}]");
-    testDumper(expected, &ptr, NS"QSharedPointer", true);
-#endif
+    testDumper(expected, &ptr, NS"QSharedPointer", true, typeToString(dummy));
 }
 
 void tst_Debugger::dumpQSharedPointer()
 {
-    QSharedPointer<int> ptr;
-    dumpQSharedPointerHelper(ptr);
+    // Case 1: Simple type.
+    // Case 1.1: Null pointer.
+    QSharedPointer<int> simplePtr;
+    // TODO: This case is not handled in gdbmacros.cpp (segfault!)
+    //dumpQSharedPointerHelper(simplePtr);
+
+    // Case 1.2: Non-null pointer,
+    QSharedPointer<int> simplePtr2(new int(99));
+    dumpQSharedPointerHelper(simplePtr2);
+
+    // Case 1.3: Shared pointer.
+    QSharedPointer<int> simplePtr3 = simplePtr2;
+    dumpQSharedPointerHelper(simplePtr2);
+
+    // Case 1.4: Weak pointer.
+    QWeakPointer<int> simplePtr4(simplePtr2);
+    dumpQSharedPointerHelper(simplePtr2);
+
+    // Case 2: Composite type.
+    // Case 1.1: Null pointer.
+    QSharedPointer<QString> compositePtr;
+    // TODO: This case is not handled in gdbmacros.cpp (segfault!)
+    //dumpQSharedPointerHelper(compoistePtr);
+
+    // Case 1.2: Non-null pointer,
+    QSharedPointer<QString> compositePtr2(new QString("Test"));
+    dumpQSharedPointerHelper(compositePtr2);
+
+    // Case 1.3: Shared pointer.
+    QSharedPointer<QString> compositePtr3 = compositePtr2;
+    dumpQSharedPointerHelper(compositePtr2);
+
+    // Case 1.4: Weak pointer.
+    QWeakPointer<QString> compositePtr4(compositePtr2);
+    dumpQSharedPointerHelper(compositePtr2);
 
-    QSharedPointer<int> ptr2(new int(99));
-    dumpQSharedPointerHelper(ptr2);
 }
 #endif