OSDN Git Service

Debugger: Fix 'Select widget to watch' on Windows.
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>
Mon, 17 Jan 2011 15:33:31 +0000 (16:33 +0100)
committerFriedemann Kleint <Friedemann.Kleint@nokia.com>
Mon, 17 Jan 2011 15:33:31 +0000 (16:33 +0100)
src/plugins/debugger/gdb/gdbengine.cpp

index dfb7d9e..a439906 100644 (file)
@@ -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."));
+            }
         }
     }
 }