diff --git a/src/plugins/debugger/qml/qmldebuggerclient.h b/src/plugins/debugger/qml/qmldebuggerclient.h index fcb7c607d880720f859b834bfcdb242f348ab3a0..f6ba4b9c2b0b693a9ebe562bf22ad5ef9d578dbd 100644 --- a/src/plugins/debugger/qml/qmldebuggerclient.h +++ b/src/plugins/debugger/qml/qmldebuggerclient.h @@ -75,8 +75,9 @@ public: virtual void changeBreakpoint(const BreakpointModelId &id) = 0; virtual void synchronizeBreakpoints() = 0; - virtual void assignValueInDebugger(const QByteArray expr, const quint64 &id, - const QString &property, const QString &value) = 0; + virtual void assignValueInDebugger(const WatchData *data, + const QString &expression, + const QVariant &valueV) = 0; virtual void updateWatchData(const WatchData &data) = 0; virtual void executeDebuggerCommand(const QString &command) = 0; diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp index 5580926d4168f685a0a461c529dcefe76651525b..10f9961802f9f401fa13c1cdba06b4d144d6d679 100644 --- a/src/plugins/debugger/qml/qmlengine.cpp +++ b/src/plugins/debugger/qml/qmlengine.cpp @@ -973,9 +973,10 @@ bool QmlEngine::setToolTipExpression(const QPoint &mousePos, void QmlEngine::assignValueInDebugger(const WatchData *data, const QString &expression, const QVariant &valueV) { - quint64 objectId = data->id; - if (objectId > 0 && !expression.isEmpty() && d->m_adapter.activeDebuggerClient()) { - d->m_adapter.activeDebuggerClient()->assignValueInDebugger(expression.toUtf8(), objectId, expression, valueV.toString()); + if (!expression.isEmpty() && d->m_adapter.activeDebuggerClient()) { + d->m_adapter.activeDebuggerClient()->assignValueInDebugger(data, + expression, + valueV); } } diff --git a/src/plugins/debugger/qml/qmlv8debuggerclient.cpp b/src/plugins/debugger/qml/qmlv8debuggerclient.cpp index ee888af93e6fe2a0aaf3e7a14ea1f5abada9d60a..1ce9aa8ff7ac2ee5d9c973696ca40e956994eb70 100644 --- a/src/plugins/debugger/qml/qmlv8debuggerclient.cpp +++ b/src/plugins/debugger/qml/qmlv8debuggerclient.cpp @@ -1153,11 +1153,12 @@ void QmlV8DebuggerClient::synchronizeBreakpoints() //NOT USED } -void QmlV8DebuggerClient::assignValueInDebugger(const QByteArray /*expr*/, const quint64 &/*id*/, - const QString &property, const QString &value) +void QmlV8DebuggerClient::assignValueInDebugger(const WatchData * /*data*/, + const QString &expr, + const QVariant &valueV) { StackHandler *stackHandler = d->engine->stackHandler(); - QString expression = QString(_("%1 = %2;")).arg(property).arg(value); + QString expression = QString(_("%1 = %2;")).arg(expr).arg(valueV.toString()); if (stackHandler->isContentsValid() && stackHandler->currentFrame().isUsable()) { d->evaluate(expression, false, false, stackHandler->currentIndex()); } else { diff --git a/src/plugins/debugger/qml/qmlv8debuggerclient.h b/src/plugins/debugger/qml/qmlv8debuggerclient.h index c7cb0fbe3639aa4d622291660f758f79ae86819d..7a77b88d85308935b896d06d82bf330d81e730ad 100644 --- a/src/plugins/debugger/qml/qmlv8debuggerclient.h +++ b/src/plugins/debugger/qml/qmlv8debuggerclient.h @@ -87,8 +87,9 @@ public: void changeBreakpoint(const BreakpointModelId &id); void synchronizeBreakpoints(); - void assignValueInDebugger(const QByteArray expr, const quint64 &id, - const QString &property, const QString &value); + void assignValueInDebugger(const WatchData *data, + const QString &expression, + const QVariant &valueV); void updateWatchData(const WatchData &); void executeDebuggerCommand(const QString &command); diff --git a/src/plugins/debugger/qml/qscriptdebuggerclient.cpp b/src/plugins/debugger/qml/qscriptdebuggerclient.cpp index 7aa0bfa83c0bbbfa126c3c782aa311d748adeca1..7fbde8d17f662531ab7c7989a8f91e60e0c660b7 100644 --- a/src/plugins/debugger/qml/qscriptdebuggerclient.cpp +++ b/src/plugins/debugger/qml/qscriptdebuggerclient.cpp @@ -222,7 +222,9 @@ void QScriptDebuggerClient::startSession() //Set all breakpoints BreakHandler *handler = d->engine->breakHandler(); - foreach (BreakpointModelId id, handler->engineBreakpointIds(d->engine)) { + DebuggerEngine * engine = d->engine->isSlaveEngine() ? + d->engine->masterEngine() : d->engine; + foreach (BreakpointModelId id, handler->engineBreakpointIds(engine)) { QTC_CHECK(handler->state(id) == BreakpointInsertProceeding); handler->notifyBreakpointInsertOk(id); } @@ -313,17 +315,19 @@ void QScriptDebuggerClient::synchronizeBreakpoints() sendMessage(reply); } -void QScriptDebuggerClient::assignValueInDebugger(const QByteArray expr, const quint64 &id, - const QString &property, const QString &value) +void QScriptDebuggerClient::assignValueInDebugger(const WatchData *data, + const QString &expr, + const QVariant &valueV) { QByteArray reply; QDataStream rs(&reply, QIODevice::WriteOnly); - QByteArray cmd = "SET_PROPERTY"; + QByteArray cmd = "EXEC"; rs << cmd; - rs << expr << id << property << value; - d->logSendMessage(QString::fromLatin1("%1 %2 %3 %4 %5"). - arg(QLatin1String(cmd), QLatin1String(expr), - QString::number(id), property, value)); + QString expression = QString(_("%1 = %2;")).arg(expr).arg(valueV.toString()); + rs << data->iname << expression; + d->logSendMessage(QString::fromLatin1("%1 %2 %3 %4"). + arg(QLatin1String(cmd), QLatin1String(data->iname), expr, + valueV.toString())); sendMessage(reply); } @@ -365,6 +369,10 @@ void QScriptDebuggerClient::synchronizeWatchers(const QStringList &watchers) void QScriptDebuggerClient::expandObject(const QByteArray &iname, quint64 objectId) { + //Check if id is valid + if (qint64(objectId) == -1) + return; + QByteArray reply; QDataStream rs(&reply, QIODevice::WriteOnly); QByteArray cmd = "EXPAND"; @@ -431,7 +439,8 @@ void QScriptDebuggerClient::messageReceived(const QByteArray &data) data.iname = d->engine->watchHandler()->watcherName(data.exp); d->engine->watchHandler()->insertData(data); - if (d->engine->watchHandler()->expandedINames().contains(data.iname)) { + if (d->engine->watchHandler()->expandedINames().contains(data.iname) && + qint64(data.id) != -1) { needPing = true; expandObject(data.iname,data.id); } @@ -441,7 +450,8 @@ void QScriptDebuggerClient::messageReceived(const QByteArray &data) data.iname = "local." + data.exp; d->engine->watchHandler()->insertData(data); - if (d->engine->watchHandler()->expandedINames().contains(data.iname)) { + if (d->engine->watchHandler()->expandedINames().contains(data.iname) && + qint64(data.id) != -1) { needPing = true; expandObject(data.iname,data.id); } @@ -511,6 +521,9 @@ void QScriptDebuggerClient::messageReceived(const QByteArray &data) d->engine->watchHandler()->insertData(data); } else if (iname == "console") { d->engine->showMessage(data.value, QtMessageLogOutput); + } else if (iname.startsWith("local.")) { + data.name = data.name.left(data.name.indexOf(QLatin1Char(' '))); + d->engine->watchHandler()->insertData(data); } else { qWarning() << "QmlEngine: Unexcpected result: " << iname << data.value; } @@ -527,7 +540,8 @@ void QScriptDebuggerClient::messageReceived(const QByteArray &data) data.iname = iname + '.' + data.exp; d->engine->watchHandler()->insertData(data); - if (d->engine->watchHandler()->expandedINames().contains(data.iname)) { + if (d->engine->watchHandler()->expandedINames().contains(data.iname) && + qint64(data.id) != -1) { needPing = true; expandObject(data.iname, data.id); } @@ -552,7 +566,8 @@ void QScriptDebuggerClient::messageReceived(const QByteArray &data) data.iname = d->engine->watchHandler()->watcherName(data.exp); d->engine->watchHandler()->insertData(data); - if (d->engine->watchHandler()->expandedINames().contains(data.iname)) { + if (d->engine->watchHandler()->expandedINames().contains(data.iname) && + qint64(data.id) != -1) { needPing = true; expandObject(data.iname, data.id); } @@ -561,7 +576,8 @@ void QScriptDebuggerClient::messageReceived(const QByteArray &data) foreach (WatchData data, locals) { data.iname = "local." + data.exp; d->engine->watchHandler()->insertData(data); - if (d->engine->watchHandler()->expandedINames().contains(data.iname)) { + if (d->engine->watchHandler()->expandedINames().contains(data.iname) && + qint64(data.id) != -1) { needPing = true; expandObject(data.iname, data.id); } diff --git a/src/plugins/debugger/qml/qscriptdebuggerclient.h b/src/plugins/debugger/qml/qscriptdebuggerclient.h index 58602723db2c4741c1bc8e151c5e6042091d4e39..56dc289829f09a5ce823e1b34b9975306ffe3cfe 100644 --- a/src/plugins/debugger/qml/qscriptdebuggerclient.h +++ b/src/plugins/debugger/qml/qscriptdebuggerclient.h @@ -72,8 +72,8 @@ public: void changeBreakpoint(const BreakpointModelId &id); void synchronizeBreakpoints(); - void assignValueInDebugger(const QByteArray expr, const quint64 &id, - const QString &property, const QString &value); + void assignValueInDebugger(const WatchData *data, const QString &expression, + const QVariant &valueV); void updateWatchData(const WatchData &data); void executeDebuggerCommand(const QString &command);