From 562b4170362aca968404be676e819460ff6de022 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Thu, 16 Jul 2009 12:09:24 +0200 Subject: [PATCH] Debugger: Remove unneeded expression for dumping QVector. ...thus enabling dumping of it in CDB. Reviewed-by: hjk <qtc-committer@nokia.com> --- share/qtcreator/gdbmacros/gdbmacros.cpp | 13 ++++++++++--- share/qtcreator/gdbmacros/test/main.cpp | 2 +- src/plugins/debugger/watchutils.cpp | 10 +--------- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/share/qtcreator/gdbmacros/gdbmacros.cpp b/share/qtcreator/gdbmacros/gdbmacros.cpp index b93bb69a4a3..9a92062d243 100644 --- a/share/qtcreator/gdbmacros/gdbmacros.cpp +++ b/share/qtcreator/gdbmacros/gdbmacros.cpp @@ -2744,6 +2744,9 @@ static void qDumpQTextCodec(QDumper &d) static void qDumpQVector(QDumper &d) { + QVectorTypedData<int> *dummy = 0; + const unsigned typeddatasize = (char*)(&dummy->array) - (char*)dummy; + QVectorData *v = *reinterpret_cast<QVectorData *const*>(d.data); // Try to provoke segfaults early to prevent the frontend @@ -2756,8 +2759,7 @@ static void qDumpQVector(QDumper &d) //qCheckAccess(&vec.back()); } - unsigned innersize = d.extraInt[0]; - unsigned typeddatasize = d.extraInt[1]; + const unsigned innersize = d.extraInt[0]; int n = nn; d.putItemCount("value", n); @@ -3348,7 +3350,8 @@ void *watchPoint(int x, int y) } #endif -// Helper to write out common expression values for CDB: +// Helpers to write out common expression values for CDB +#ifdef Q_CC_MSVC // Offsets of a map node value which looks like // "(size_t)&(('QMapNode<QString,QString >'*)0)->value")" in gdb syntax @@ -3394,6 +3397,8 @@ template <class Key, class Value> return d; } +#endif // Q_CC_MSVC + extern "C" Q_DECL_EXPORT void *qDumpObjectData440( int protocolVersion, @@ -3515,6 +3520,7 @@ void *qDumpObjectData440( .put(NS"QMapNode<"NS"QString,"NS"QVariant>=\"").put(sizeof(QMapNode<QString, QVariant>)) .put("\"}"); // Write out common expression values for CDB +#ifdef Q_CC_MSVC d.put(",expressions={"); putQMapNodeOffsetExpression<int,int>("int", "int", d).put(','); putQMapNodeOffsetExpression<int,QString>("int", NS"QString", d).put(','); @@ -3534,6 +3540,7 @@ void *qDumpObjectData440( putStdPairValueOffsetExpression<int,std::wstring>("int", stdWideStringTypeUShortC, d).put(','); putStdPairValueOffsetExpression<std::wstring,int>(stdWideStringTypeUShortC, "int", d); d.put('}'); +#endif // Q_CC_MSVC d.disarm(); } diff --git a/share/qtcreator/gdbmacros/test/main.cpp b/share/qtcreator/gdbmacros/test/main.cpp index 8b24d55aca6..22f68e1a3c6 100644 --- a/share/qtcreator/gdbmacros/test/main.cpp +++ b/share/qtcreator/gdbmacros/test/main.cpp @@ -140,7 +140,7 @@ static int dumpQIntList() static int dumpQIntVector() { - QVector<int> test = QVector<int>() << 1 << 2; + QVector<int> test = QVector<int>() << 42 << 43; prepareInBuffer("QVector", "local.qintvector", "local.qintvector", "int"); qDumpObjectData440(2, 42, testAddress(&test), 1, sizeof(int), 0, 0, 0); fputs(qDumpOutBuffer, stdout); diff --git a/src/plugins/debugger/watchutils.cpp b/src/plugins/debugger/watchutils.cpp index d6daad15514..490fd2a64a8 100644 --- a/src/plugins/debugger/watchutils.cpp +++ b/src/plugins/debugger/watchutils.cpp @@ -798,7 +798,6 @@ QtDumperHelper::ExpressionRequirement QtDumperHelper::expressionRequirements(Typ switch (t) { case QAbstractItemType: - case QVectorType: return NeedsComplexExpression; case QMapType: case QMultiMapType: @@ -1353,14 +1352,6 @@ void QtDumperHelper::evaluationParameters(const WatchData &data, case QAbstractItemType: inner = data.addr.mid(1); break; - case QVectorType: - if (m_qtVersion >= 0x040600) - extraArgs[1] = QString("(char*)&((%1).p->array)-(char*)((%2).p)") - .arg(data.exp).arg(data.exp); - else - extraArgs[1] = QString("(char*)&((%1).d->array)-(char*)((%2).d)") - .arg(data.exp).arg(data.exp); - break; case QObjectSlotType: case QObjectSignalType: { // we need the number out of something like @@ -1453,6 +1444,7 @@ void QtDumperHelper::evaluationParameters(const WatchData &data, qWarning("Unknown type encountered in %s.\n", Q_FUNC_INFO); break; case SupportedType: + case QVectorType: case QObjectType: case QWidgetType: break; -- GitLab