From 4ceabf26d4c0ba0bf023c7f7605bca639f338c48 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Wed, 4 Nov 2009 17:44:11 +0100
Subject: [PATCH] debugger: fix issue where child items oeverwrite parent items
 in the watch model.

The real problems is somewhere in the watch model. This patch does
only prevent the wrong (and unneeded) questions to be asked in the first
place. It does not fix the wrong handling of the answer in the watch model.

Reviewed-by: Oswald Buddenhagen
---
 src/plugins/debugger/gdb/gdbengine.cpp | 27 +++++++++-----------------
 1 file changed, 9 insertions(+), 18 deletions(-)

diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index cc3296357e7..d548e5b7309 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -3257,23 +3257,13 @@ void GdbEngine::handleVarCreate(const GdbResponse &response)
     if (response.resultClass == GdbResultDone) {
         data.variable = data.iname;
         setWatchDataType(data, response.data.findChild("type"));
-        if (hasDebuggingHelperForType(data.type)) {
-            // we do not trust gdb if we have a custom dumper
-            if (response.data.findChild("children").isValid())
-                data.setChildrenUnneeded();
-            else if (manager()->watchHandler()->isExpandedIName(data.iname))
-                data.setChildrenNeeded();
-            insertData(data);
-        } else {
-            if (response.data.findChild("children").isValid())
-                data.setChildrenUnneeded();
-            else if (manager()->watchHandler()->isExpandedIName(data.iname))
-                data.setChildrenNeeded();
-            setWatchDataChildCount(data, response.data.findChild("numchild"));
-            //if (data.isValueNeeded() && data.childCount > 0)
-            //    data.setValue(QString());
-            insertData(data);
-        }
+        if (manager()->watchHandler()->isExpandedIName(data.iname)
+                && !response.data.findChild("children").isValid())
+            data.setChildrenNeeded();
+        else
+            data.setChildrenUnneeded();
+        setWatchDataChildCount(data, response.data.findChild("numchild"));
+        insertData(data);
     } else {
         data.setError(QString::fromLocal8Bit(response.data.findChild("msg").data()));
         if (data.isWatcher()) {
@@ -3718,7 +3708,8 @@ void GdbEngine::insertData(const WatchData &data0)
 void GdbEngine::handleVarListChildrenHelper(const GdbMi &item,
     const WatchData &parent)
 {
-    //qDebug() <<  "VAR_LIST_CHILDREN: APPENDEE" << data.toString();
+    //qDebug() <<  "VAR_LIST_CHILDREN: PARENT" << parent.toString();
+    //qDebug() <<  "VAR_LIST_CHILDREN: ITEM" << item.toString();
     QByteArray exp = item.findChild("exp").data();
     QByteArray name = item.findChild("name").data();
     if (isAccessSpecifier(_(exp))) {
-- 
GitLab