diff --git a/share/qtcreator/gdbmacros/gdbmacros.cpp b/share/qtcreator/gdbmacros/gdbmacros.cpp
index 73e519b3b67d3217c1fbd40973e25d6a4a4a9a81..56a5d7f2d63363679d41a08fb8685862a4103acf 100644
--- a/share/qtcreator/gdbmacros/gdbmacros.cpp
+++ b/share/qtcreator/gdbmacros/gdbmacros.cpp
@@ -2722,6 +2722,14 @@ static void qDumpQSharedPointer(QDumper &d)
     const QSharedPointer<int> &ptr =
         *reinterpret_cast<const QSharedPointer<int> *>(d.data);
 
+    if (ptr.isNull()) { 
+        d.putItem("value", "<null>");
+        d.putItem("valuedisabled", "true");
+        d.putItem("numchild", 0);
+        d.disarm();
+        return;
+    }
+
     if (isSimpleType(d.innertype))
         qDumpInnerValueHelper(d, d.innertype, ptr.data());
     else
@@ -2878,6 +2886,15 @@ static void qDumpQWeakPointer(QDumper &d)
 {
     const int v = sizeof(void *);
     const void *value = deref(addOffset(d.data, v));
+    const void *data = deref(d.data);
+
+    if (value == 0 || data == 0) {
+        d.putItem("value", "<null>");
+        d.putItem("valuedisabled", "true");
+        d.putItem("numchild", 0);
+        d.disarm();
+        return;
+    }
 
     if (isSimpleType(d.innertype))
         qDumpInnerValueHelper(d, d.innertype, value);