From 51c4740266b993c4b51b6c71dace82ed76e4bdf1 Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Date: Mon, 17 Jan 2011 16:33:31 +0100
Subject: [PATCH] Debugger: Fix 'Select widget to watch' on Windows.

---
 src/plugins/debugger/gdb/gdbengine.cpp | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index dfb7d9ea209..a439906a8be 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -3731,23 +3731,24 @@ void GdbEngine::watchPoint(const QPoint &pnt)
 void GdbEngine::handleWatchPoint(const GdbResponse &response)
 {
     if (response.resultClass == GdbResultDone) {
-        const GdbMi contents = response.data.findChild("consolestreamoutput");
         // "$5 = (void *) 0xbfa7ebfc\n"
         const QByteArray ba = parsePlainConsoleStream(response);
         //qDebug() << "BA: " << ba;
         const int posWidget = ba.indexOf("QWidget");
-        const int posNs = ba.lastIndexOf(' ', posWidget) + 1;
         const int pos0x = ba.indexOf("0x", posWidget + 7);
-        if (posWidget == -1 || posNs == 0 || pos0x == -1) {
+        if (posWidget == -1 || pos0x == -1) {
             showStatusMessage(tr("Cannot read widget data: %1").arg(_(ba)));
         } else {
             const QByteArray addr = ba.mid(pos0x);
-            //const QByteArray ns = ba.mid(posNs, posWidget - posNs);
-            const QByteArray ns = qtNamespace();
-            const QByteArray type = ns.isEmpty() ? "QWidget*" : ("'" + ns + "QWidget'*");
-            const QString exp = _("(*(struct %1)%2)").arg(_(type)).arg(_(addr));
-            // qDebug() << posNs << posWidget << pos0x << addr << ns << type;
-            watchHandler()->watchExpression(exp);
+            if (addr.toULongLong(0, 0)) { // Non-null pointer
+                const QByteArray ns = qtNamespace();
+                const QByteArray type = ns.isEmpty() ? "QWidget*" : ("'" + ns + "QWidget'*");
+                const QString exp = _("(*(struct %1)%2)").arg(_(type)).arg(_(addr));
+                // qDebug() << posNs << posWidget << pos0x << addr << ns << type;
+                watchHandler()->watchExpression(exp);
+            } else {
+                showStatusMessage(tr("Could not find a widget."));
+            }
         }
     }
 }
-- 
GitLab