From a73ad904c9a4ad188604de6c64a6c91cd514dc1b Mon Sep 17 00:00:00 2001 From: Aurindam Jana Date: Tue, 21 Feb 2012 14:56:24 +0100 Subject: [PATCH] DebugMessageService: Also pass Debug Context Info Use QMessageHandler which provides context information such as line, file and function for the debug output. Change-Id: I475faf4a1363d8419dec910b8a23cc44666c1908 Reviewed-by: Kai Koehne --- src/declarative/debugger/qdebugmessageservice.cpp | 23 ++++++++----- src/declarative/debugger/qdebugmessageservice_p.h | 5 ++- .../tst_qdebugmessageservice.cpp | 36 +++++++++++++++++--- 3 files changed, 49 insertions(+), 15 deletions(-) diff --git a/src/declarative/debugger/qdebugmessageservice.cpp b/src/declarative/debugger/qdebugmessageservice.cpp index e7c4901..4a17da9 100644 --- a/src/declarative/debugger/qdebugmessageservice.cpp +++ b/src/declarative/debugger/qdebugmessageservice.cpp @@ -46,9 +46,10 @@ QT_BEGIN_NAMESPACE Q_GLOBAL_STATIC(QDebugMessageService, declarativeDebugMessageService) -void DebugMessageHandler(QtMsgType type, const char *buf) +void DebugMessageHandler(QtMsgType type, const QMessageLogContext &ctxt, + const char *buf) { - QDebugMessageService::instance()->sendDebugMessage(type, buf); + QDebugMessageService::instance()->sendDebugMessage(type, ctxt, buf); } class QDebugMessageServicePrivate : public QDeclarativeDebugServicePrivate @@ -60,7 +61,7 @@ public: { } - QtMsgHandler oldMsgHandler; + QMessageHandler oldMsgHandler; QDeclarativeDebugService::State prevState; }; @@ -72,7 +73,7 @@ QDebugMessageService::QDebugMessageService(QObject *parent) : registerService(); if (state() == Enabled) { - d->oldMsgHandler = qInstallMsgHandler(DebugMessageHandler); + d->oldMsgHandler = qInstallMessageHandler(DebugMessageHandler); d->prevState = Enabled; } } @@ -82,7 +83,9 @@ QDebugMessageService *QDebugMessageService::instance() return declarativeDebugMessageService(); } -void QDebugMessageService::sendDebugMessage(QtMsgType type, const char *buf) +void QDebugMessageService::sendDebugMessage(QtMsgType type, + const QMessageLogContext &ctxt, + const char *buf) { Q_D(QDebugMessageService); @@ -92,10 +95,12 @@ void QDebugMessageService::sendDebugMessage(QtMsgType type, const char *buf) QByteArray message; QDataStream ws(&message, QIODevice::WriteOnly); ws << QByteArray("MESSAGE") << type << QString::fromLocal8Bit(buf).toUtf8(); + ws << ctxt.version << QString::fromLatin1(ctxt.file).toUtf8(); + ws << ctxt.line << QString::fromLatin1(ctxt.function).toUtf8(); sendMessage(message); if (d->oldMsgHandler) - (*d->oldMsgHandler)(type, buf); + (*d->oldMsgHandler)(type, ctxt, buf); } void QDebugMessageService::stateChanged(State state) @@ -103,13 +108,13 @@ void QDebugMessageService::stateChanged(State state) Q_D(QDebugMessageService); if (state != Enabled && d->prevState == Enabled) { - QtMsgHandler handler = qInstallMsgHandler(d->oldMsgHandler); + QMessageHandler handler = qInstallMessageHandler(d->oldMsgHandler); // has our handler been overwritten in between? if (handler != DebugMessageHandler) - qInstallMsgHandler(handler); + qInstallMessageHandler(handler); } else if (state == Enabled && d->prevState != Enabled) { - d->oldMsgHandler = qInstallMsgHandler(DebugMessageHandler); + d->oldMsgHandler = qInstallMessageHandler(DebugMessageHandler); } diff --git a/src/declarative/debugger/qdebugmessageservice_p.h b/src/declarative/debugger/qdebugmessageservice_p.h index bf0e17c..b907341 100644 --- a/src/declarative/debugger/qdebugmessageservice_p.h +++ b/src/declarative/debugger/qdebugmessageservice_p.h @@ -55,6 +55,8 @@ #include "qdeclarativedebugservice_p.h" +#include + QT_BEGIN_HEADER QT_BEGIN_NAMESPACE @@ -71,7 +73,8 @@ public: static QDebugMessageService *instance(); - void sendDebugMessage(QtMsgType type, const char *buf); + void sendDebugMessage(QtMsgType type, const QMessageLogContext &ctxt, + const char *buf); protected: void stateChanged(State); diff --git a/tests/auto/declarative/debugger/qdebugmessageservice/tst_qdebugmessageservice.cpp b/tests/auto/declarative/debugger/qdebugmessageservice/tst_qdebugmessageservice.cpp index 625e038..0e15a2d 100644 --- a/tests/auto/declarative/debugger/qdebugmessageservice/tst_qdebugmessageservice.cpp +++ b/tests/auto/declarative/debugger/qdebugmessageservice/tst_qdebugmessageservice.cpp @@ -81,13 +81,19 @@ struct LogEntry { QtMsgType type; QString message; + int version; + int line; + QString file; + QString function; QString toString() const { return QString::number(type) + ": " + message; } }; bool operator==(const LogEntry &t1, const LogEntry &t2) { - return t1.type == t2.type && t1.message == t2.message; + return t1.type == t2.type && t1.message == t2.message + && t1.line == t2.line && t1.file == t2.file + && t1.function == t2.function; } class QDeclarativeDebugMsgClient : public QDeclarativeDebugClient @@ -127,13 +133,22 @@ void QDeclarativeDebugMsgClient::messageReceived(const QByteArray &data) if (command == "MESSAGE") { int type; QByteArray message; - ds >> type >> message; + QByteArray file; + QByteArray function; + int line; + int version; + ds >> type >> message >> version >> file >> line >> function; QVERIFY(ds.atEnd()); QVERIFY(type >= QtDebugMsg); QVERIFY(type <= QtFatalMsg); - logBuffer << LogEntry((QtMsgType)type, QString::fromUtf8(message)); + LogEntry entry((QtMsgType)type, QString::fromUtf8(message)); + entry.line = line; + entry.version = version; + entry.file = QString::fromLatin1(file); + entry.function = QString::fromLatin1(function); + logBuffer << entry; emit debugOutput(); } else { QFAIL("Unknown message"); @@ -210,8 +225,19 @@ void tst_QDebugMessageService::retrieveDebugOutput() QVERIFY(m_client->logBuffer.size() >= 2); - QVERIFY(m_client->logBuffer.contains(LogEntry(QtDebugMsg, QLatin1String("console.log")))); - QVERIFY(m_client->logBuffer.contains(LogEntry(QtDebugMsg, QLatin1String("console.count: 1")))); + const QString path = + QUrl::fromLocalFile(QDeclarativeDataTest::instance()->testFile(QMLFILE)).toString(); + LogEntry entry1(QtDebugMsg, QLatin1String("console.log")); + entry1.line = 48; + entry1.file = path; + entry1.function = QLatin1String("onCompleted"); + LogEntry entry2(QtDebugMsg, QLatin1String("console.count: 1")); + entry2.line = 49; + entry2.file = path; + entry2.function = QLatin1String("onCompleted"); + + QVERIFY(m_client->logBuffer.contains(entry1)); + QVERIFY(m_client->logBuffer.contains(entry2)); } QTEST_MAIN(tst_QDebugMessageService) -- 1.7.2.5