From 0428a109e858a7f01662611a345f1a974751c036 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Wed, 29 Apr 2009 15:09:08 +0200
Subject: [PATCH] debugger: fix output of weak and strong reference counts in
 QSharedPointer dumper

---
 share/qtcreator/gdbmacros/gdbmacros.cpp | 19 +++++++++++++++++--
 src/plugins/debugger/watchhandler.cpp   |  2 ++
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/share/qtcreator/gdbmacros/gdbmacros.cpp b/share/qtcreator/gdbmacros/gdbmacros.cpp
index 2b6dba0149e..7c766dff31e 100644
--- a/share/qtcreator/gdbmacros/gdbmacros.cpp
+++ b/share/qtcreator/gdbmacros/gdbmacros.cpp
@@ -1972,8 +1972,23 @@ static void qDumpQSharedPointer(QDumper &d)
             P(d, "name", "data");
             qDumpInnerValue(d, d.innertype, ptr.data());
         d.endHash();
-        I(d, "strongref", 44);
-        I(d, "weakref", 45);
+        const int v = sizeof(void *);
+        d.beginHash();
+            const void *weak = addOffset(deref(addOffset(d.data, v)), v);
+            P(d, "name", "weakref"); 
+            P(d, "value", *static_cast<const int *>(weak));
+            P(d, "type", "int"); 
+            P(d, "addr",  weak);
+            P(d, "numchild", "0");
+        d.endHash();
+        d.beginHash();
+            const void *strong = addOffset(weak, sizeof(int));
+            P(d, "name", "strongref"); 
+            P(d, "value", *static_cast<const int *>(strong));
+            P(d, "type", "int"); 
+            P(d, "addr",  strong);
+            P(d, "numchild", "0");
+        d.endHash();
         d << "]";
     }
     d.disarm();
diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index ef0b7d402ca..144f85f4f8d 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -808,6 +808,8 @@ void WatchHandler::cleanup()
     m_completeSet = initialSet();
     m_displaySet = m_completeSet;
 
+    rebuildModel(); // to get the dummy entries back
+
 #if 0
     for (EditWindows::ConstIterator it = m_editWindows.begin();
             it != m_editWindows.end(); ++it) {
-- 
GitLab