diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index dfb7d9ea2091ef53a131a5f6c31cda03fb005a7e..a439906a8bed11cc76a196711c68661932128dcc 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.")); + } } } }