From bde8287cdd014d8de239f521e3a8c6057472ada4 Mon Sep 17 00:00:00 2001 From: Kai Koehne <kai.koehne@nokia.com> Date: Fri, 17 Dec 2010 10:18:34 +0100 Subject: [PATCH] QmlDebugger: Also log messages from JSDebugger to debug console --- src/plugins/debugger/qml/qmladapter.cpp | 3 +- src/plugins/debugger/qml/qmlengine.cpp | 122 +++++++++++++++++++----- src/plugins/debugger/qml/qmlengine.h | 6 ++ 3 files changed, 107 insertions(+), 24 deletions(-) diff --git a/src/plugins/debugger/qml/qmladapter.cpp b/src/plugins/debugger/qml/qmladapter.cpp index c3110397b0b..55aa60957f4 100644 --- a/src/plugins/debugger/qml/qmladapter.cpp +++ b/src/plugins/debugger/qml/qmladapter.cpp @@ -287,7 +287,8 @@ void QmlAdapter::logServiceStatusChange(const QString &service, QDeclarativeDebu void QmlAdapter::logServiceActivity(const QString &service, const QString &logMessage) { - showConnectionStatusMessage(QString("%1 %2").arg(service, logMessage)); + if (!d->m_engine.isNull()) + d->m_engine.data()->showMessage(QString("%1 %2").arg(service, logMessage), LogDebug); } void QmlAdapter::flushSendBuffer() diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp index 314c87e41f7..c48bbeb4446 100644 --- a/src/plugins/debugger/qml/qmlengine.cpp +++ b/src/plugins/debugger/qml/qmlengine.cpp @@ -292,7 +292,6 @@ void QmlEngine::runEngine() } d->m_adapter->beginConnection(); - showMessage(tr("QML Debugger connecting..."), StatusBar); } void QmlEngine::startApplicationLauncher() @@ -368,7 +367,9 @@ void QmlEngine::continueInferior() QTC_ASSERT(state() == InferiorStopOk, qDebug() << state()); QByteArray reply; QDataStream rs(&reply, QIODevice::WriteOnly); - rs << QByteArray("CONTINUE"); + QByteArray cmd = "CONTINUE"; + rs << cmd; + logMessage(LogSend, cmd); sendMessage(reply); resetLocation(); notifyInferiorRunRequested(); @@ -379,7 +380,9 @@ void QmlEngine::interruptInferior() { QByteArray reply; QDataStream rs(&reply, QIODevice::WriteOnly); - rs << QByteArray("INTERRUPT"); + QByteArray cmd = "INTERRUPT"; + rs << cmd; + logMessage(LogSend, cmd); sendMessage(reply); notifyInferiorStopOk(); } @@ -388,7 +391,9 @@ void QmlEngine::executeStep() { QByteArray reply; QDataStream rs(&reply, QIODevice::WriteOnly); - rs << QByteArray("STEPINTO"); + QByteArray cmd = "STEPINTO"; + rs << cmd; + logMessage(LogSend, cmd); sendMessage(reply); notifyInferiorRunRequested(); notifyInferiorRunOk(); @@ -398,7 +403,9 @@ void QmlEngine::executeStepI() { QByteArray reply; QDataStream rs(&reply, QIODevice::WriteOnly); - rs << QByteArray("STEPINTO"); + QByteArray cmd = "STEPINTO"; + rs << cmd; + logMessage(LogSend, cmd); sendMessage(reply); notifyInferiorRunRequested(); notifyInferiorRunOk(); @@ -408,7 +415,9 @@ void QmlEngine::executeStepOut() { QByteArray reply; QDataStream rs(&reply, QIODevice::WriteOnly); - rs << QByteArray("STEPOUT"); + QByteArray cmd = "STEPOUT"; + rs << cmd; + logMessage(LogSend, cmd); sendMessage(reply); notifyInferiorRunRequested(); notifyInferiorRunOk(); @@ -418,7 +427,9 @@ void QmlEngine::executeNext() { QByteArray reply; QDataStream rs(&reply, QIODevice::WriteOnly); - rs << QByteArray("STEPOVER"); + QByteArray cmd = "STEPOVER"; + rs << cmd; + logMessage(LogSend, cmd); sendMessage(reply); notifyInferiorRunRequested(); notifyInferiorRunOk(); @@ -453,8 +464,10 @@ void QmlEngine::activateFrame(int index) { QByteArray reply; QDataStream rs(&reply, QIODevice::WriteOnly); - rs << QByteArray("ACTIVATE_FRAME"); - rs << index; + QByteArray cmd = "ACTIVATE_FRAME"; + rs << cmd + << index; + logMessage(LogSend, QString("%1 %2").arg(QString(cmd), QString::number(index))); sendMessage(reply); gotoLocation(stackHandler()->frames().value(index), true); } @@ -505,9 +518,17 @@ void QmlEngine::attemptBreakpointSynchronization() QByteArray reply; QDataStream rs(&reply, QIODevice::WriteOnly); - rs << QByteArray("BREAKPOINTS"); - rs << breakpoints; - //qDebug() << Q_FUNC_INFO << breakpoints; + QByteArray cmd = "BREAKPOINTS"; + rs << cmd + << breakpoints; + + QStringList breakPointsStr; + foreach (const JSAgentBreakpointData &bp, breakpoints) { + breakPointsStr << QString("('%1' '%2' %3)").arg(QString(bp.functionName), + QString(bp.fileName), QString::number(bp.lineNumber)); + } + logMessage(LogSend, QString("%1 [%2]").arg(QString(cmd), breakPointsStr.join(", "))); + sendMessage(reply); } @@ -565,8 +586,12 @@ void QmlEngine::assignValueInDebugger(const WatchData *, if (ok && objectId > 0 && !property.isEmpty()) { QByteArray reply; QDataStream rs(&reply, QIODevice::WriteOnly); - rs << QByteArray("SET_PROPERTY"); + QByteArray cmd = "SET_PROPERTY"; + rs << cmd; rs << expression.toUtf8() << objectId << property << valueV.toString(); + logMessage(LogSend, QString("%1 %2 %3 %4 %5").arg( + QString(cmd), QString::number(objectId), QString(property), + valueV.toString())); sendMessage(reply); } } @@ -582,8 +607,11 @@ void QmlEngine::updateWatchData(const WatchData &data, if (!data.name.isEmpty() && data.isValueNeeded()) { QByteArray reply; QDataStream rs(&reply, QIODevice::WriteOnly); - rs << QByteArray("EXEC"); + QByteArray cmd = "EXEC"; + rs << cmd; rs << data.iname << data.name; + logMessage(LogSend, QString("%1 %2 %3").arg(QString(cmd), QString(data.iname), + QString(data.name))); sendMessage(reply); } @@ -594,8 +622,11 @@ void QmlEngine::updateWatchData(const WatchData &data, { QByteArray reply; QDataStream rs(&reply, QIODevice::WriteOnly); - rs << QByteArray("WATCH_EXPRESSIONS"); + QByteArray cmd = "WATCH_EXPRESSIONS"; + rs << cmd; rs << watchHandler()->watchedExpressions(); + logMessage(LogSend, QString("%1 %2").arg( + QString(cmd), watchHandler()->watchedExpressions().join(", "))); sendMessage(reply); } @@ -603,12 +634,15 @@ void QmlEngine::updateWatchData(const WatchData &data, watchHandler()->insertData(data); } -void QmlEngine::expandObject(const QByteArray& iname, quint64 objectId) +void QmlEngine::expandObject(const QByteArray &iname, quint64 objectId) { QByteArray reply; QDataStream rs(&reply, QIODevice::WriteOnly); - rs << QByteArray("EXPAND"); + QByteArray cmd = "EXPAND"; + rs << cmd; rs << iname << objectId; + logMessage(LogSend, QString("%1 %2 %3").arg(QString(cmd), QString(iname), + QString::number(objectId))); sendMessage(reply); } @@ -617,8 +651,10 @@ void QmlEngine::sendPing() d->m_ping++; QByteArray reply; QDataStream rs(&reply, QIODevice::WriteOnly); - rs << QByteArray("PING"); + QByteArray cmd = "PING"; + rs << cmd; rs << d->m_ping; + logMessage(LogSend, QString("%1 %2").arg(QString(cmd), QString::number(d->m_ping))); sendMessage(reply); } @@ -649,18 +685,21 @@ void QmlEngine::messageReceived(const QByteArray &message) QByteArray command; stream >> command; - showMessage(QLatin1String("RECEIVED RESPONSE: ") - + quoteUnprintableLatin1(message)); - if (command == "STOPPED") { if (state() == InferiorRunOk) notifyInferiorSpontaneousStop(); + QString logString = QString(command); + StackFrames stackFrames; QList<WatchData> watches; QList<WatchData> locals; stream >> stackFrames >> watches >> locals; + logString += " (" % QString::number(stackFrames.size()) % " stack frames)"; + logString += " (" % QString::number(watches.size()) % " watches)"; + logString += " (" % QString::number(locals.size()) % " locals)"; + for (int i = 0; i != stackFrames.size(); ++i) stackFrames[i].level = i + 1; @@ -697,10 +736,16 @@ void QmlEngine::messageReceived(const QByteArray &message) bool becauseOfException; stream >> becauseOfException; + + logString += becauseOfException ? " exception" : " no_exception"; + if (becauseOfException) { QString error; stream >> error; + logString += " " % error; + logMessage(LogReceive, logString); + QString msg = tr("<p>An Uncaught Exception occured in <i>%1</i>:</p><p>%2</p>") .arg(stackFrames.value(0).file, Qt::escape(error)); @@ -735,11 +780,16 @@ void QmlEngine::messageReceived(const QByteArray &message) handler->setResponse(id, br); } } + + logMessage(LogReceive, logString); } } else if (command == "RESULT") { WatchData data; QByteArray iname; stream >> iname >> data; + + logMessage(LogReceive, QString("%1 %2 %3").arg(QString(command), + QString(iname), QString(data.value))); data.iname = iname; if (iname.startsWith("watch.")) { watchHandler()->insertData(data); @@ -752,6 +802,9 @@ void QmlEngine::messageReceived(const QByteArray &message) QList<WatchData> result; QByteArray iname; stream >> iname >> result; + + logMessage(LogReceive, QString("%1 %2 (%3 x watchdata)").arg( + QString(command), QString(iname), QString::number(result.size()))); bool needPing = false; foreach (WatchData data, result) { data.iname = iname + '.' + data.exp; @@ -768,6 +821,10 @@ void QmlEngine::messageReceived(const QByteArray &message) QList<WatchData> locals; int frameId; stream >> frameId >> locals; + + logMessage(LogReceive, QString("%1 %2 (%3 x locals)").arg( + QString(command), QString::number(frameId), + QString::number(locals.size()))); watchHandler()->beginCycle(); bool needPing = false; foreach (WatchData data, locals) { @@ -786,10 +843,14 @@ void QmlEngine::messageReceived(const QByteArray &message) } else if (command == "PONG") { int ping; stream >> ping; + + logMessage(LogReceive, QString("%1 %2").arg(QString(command), QString::number(ping))); + if (ping == d->m_ping) watchHandler()->endCycle(); } else { qDebug() << Q_FUNC_INFO << "Unknown command: " << command; + logMessage(LogReceive, QString("%1 UNKNOWN COMMAND!!").arg(QString(command))); } } @@ -803,8 +864,11 @@ void QmlEngine::executeDebuggerCommand(const QString& command) { QByteArray reply; QDataStream rs(&reply, QIODevice::WriteOnly); - rs << QByteArray("EXEC"); - rs << QByteArray("console") << command; + QByteArray cmd = "EXEC"; + QByteArray console = "console"; + rs << cmd << console << command; + logMessage(LogSend, QString("%1 %2 %3").arg(QString(cmd), QString(console), + QString(command))); sendMessage(reply); } @@ -871,6 +935,18 @@ QString QmlEngine::fromShadowBuildFilename(const QString &filename) const return newFilename; } +void QmlEngine::logMessage(LogDirection direction, const QString &message) +{ + QString msg = "JSDebugger"; + if (direction == LogSend) { + msg += " sending "; + } else { + msg += " receiving "; + } + msg += message; + showMessage(msg, LogDebug); +} + } // namespace Internal } // namespace Debugger diff --git a/src/plugins/debugger/qml/qmlengine.h b/src/plugins/debugger/qml/qmlengine.h index 4e60d62929a..563e2f94652 100644 --- a/src/plugins/debugger/qml/qmlengine.h +++ b/src/plugins/debugger/qml/qmlengine.h @@ -139,6 +139,12 @@ private: QString toShadowBuildFilename(const QString &filename) const; QString qmlImportPath() const; + enum LogDirection { + LogSend, + LogReceive + }; + void logMessage(LogDirection direction, const QString &str); + private: friend class QmlCppEngine; -- GitLab