From fa87783cb4533216b0bf1873e37ace227df67fe8 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Tue, 5 May 2009 12:11:22 +0200 Subject: [PATCH] Added test application for Debugger dumper development. --- share/qtcreator/gdbmacros/test/dumpertest.pro | 16 ++ share/qtcreator/gdbmacros/test/main.cpp | 169 ++++++++++++++++++ 2 files changed, 185 insertions(+) create mode 100644 share/qtcreator/gdbmacros/test/dumpertest.pro create mode 100644 share/qtcreator/gdbmacros/test/main.cpp diff --git a/share/qtcreator/gdbmacros/test/dumpertest.pro b/share/qtcreator/gdbmacros/test/dumpertest.pro new file mode 100644 index 00000000000..6f59409d5ca --- /dev/null +++ b/share/qtcreator/gdbmacros/test/dumpertest.pro @@ -0,0 +1,16 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2009-05-05T11:16:25 +# +#------------------------------------------------- + +QT -= gui + +TARGET = dumpertest +CONFIG += console +CONFIG -= app_bundle + +TEMPLATE = app + +SOURCES += main.cpp \ +../gdbmacros.cpp diff --git a/share/qtcreator/gdbmacros/test/main.cpp b/share/qtcreator/gdbmacros/test/main.cpp new file mode 100644 index 00000000000..36b354c8512 --- /dev/null +++ b/share/qtcreator/gdbmacros/test/main.cpp @@ -0,0 +1,169 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Qt Software Information (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** +**************************************************************************/ + +#include <QtCore/QStringList> + +#include <string> +#include <list> + +#include <stdio.h> +#include <string.h> + +/* Test program for Dumper development/porting. + * Takes the type as first argument. */ + +// --------------- Dumper symbols +extern char qDumpInBuffer[10000]; +extern char qDumpOutBuffer[100000]; + +extern "C" void *qDumpObjectData440( + int protocolVersion, + int token, + void *data, +#ifdef Q_CC_MSVC // CDB cannot handle boolean parameters + int dumpChildren, +#else + bool dumpChildren, +#endif + int extraInt0, int extraInt1, int extraInt2, int extraInt3); + +static void prepareInBuffer(const char *outerType, + const char *iname, + const char *expr, + const char *innerType) +{ + // Leave trailing '\0' + char *ptr = qDumpInBuffer; + strcpy(ptr, outerType); + ptr += strlen(outerType); + ptr++; + strcpy(ptr, iname); + ptr += strlen(iname); + ptr++; + strcpy(ptr, expr); + ptr += strlen(expr); + ptr++; + strcpy(ptr, innerType); + ptr += strlen(innerType); + ptr++; + strcpy(ptr, iname); +} + +// --------------- Qt types +static int dumpQString() +{ + QString test = QLatin1String("hallo"); + prepareInBuffer("QString", "local.qstring", "local.qstring", ""); + qDumpObjectData440(2, 42, &test, 1, 0, 0, 0, 0); + fputs(qDumpOutBuffer, stdout); + fputc('\n', stdout); + return 0; +} + +static int dumpQStringList() +{ + QStringList test = QStringList() << QLatin1String("item1") << QLatin1String("item2"); + prepareInBuffer("QList", "local.qstringlist", "local.qstringlist", "QString"); + qDumpObjectData440(2, 42, &test, 1, sizeof(QString), 0, 0, 0); + fputs(qDumpOutBuffer, stdout); + fputc('\n', stdout); + return 0; +} + +static int dumpQIntList() +{ + QList<int> test = QList<int>() << 1 << 2; + prepareInBuffer("QList", "local.qintlist", "local.qintlist", "int"); + qDumpObjectData440(2, 42, &test, 1, sizeof(int), 0, 0, 0); + fputs(qDumpOutBuffer, stdout); + fputc('\n', stdout); + return 0; +} + +// --------------- std types + +static int dumpStdString() +{ + std::string test = "hallo"; + prepareInBuffer("std::string", "local.string", "local.string", ""); + qDumpObjectData440(2, 42, &test, 1, 0, 0, 0, 0); + fputs(qDumpOutBuffer, stdout); + fputc('\n', stdout); + return 0; +} + +static int dumpStdStringList() +{ + std::list<std::string> test; + test.push_back("item1"); + test.push_back("item2"); + prepareInBuffer("std::list", "local.stringlist", "local.stringlist", "std::string"); + qDumpObjectData440(2, 42, &test, 1, sizeof(std::string), sizeof(std::list<std::string>::allocator_type), 0, 0); + fputs(qDumpOutBuffer, stdout); + fputc('\n', stdout); + return 0; +} + +static int dumpStdIntList() +{ + std::list<int> test; + test.push_back(1); + test.push_back(2); + prepareInBuffer("std::list", "local.intlist", "local.intlist", "int"); + qDumpObjectData440(2, 42, &test, 1, sizeof(int), sizeof(std::list<int>::allocator_type), 0, 0); + fputs(qDumpOutBuffer, stdout); + fputc('\n', stdout); + return 0; +} + +int main(int argc, char *argv[]) +{ + printf("Running query protocol\n"); + qDumpObjectData440(1, 42, 0, 1, 0, 0, 0, 0); + fputs(qDumpOutBuffer, stdout); + fputc('\n', stdout); + fputc('\n', stdout); + if (argc < 2) + return 0; + const char *arg = argv[1]; + if (!qstrcmp(arg, "QString")) + return dumpQString(); + if (!qstrcmp(arg, "QStringList")) + return dumpQStringList(); + if (!qstrcmp(arg, "QList<int>")) + return dumpQIntList(); + if (!qstrcmp(arg, "string")) + return dumpStdString(); + if (!qstrcmp(arg, "list<int>")) + return dumpStdIntList(); + if (!qstrcmp(arg, "list<string>")) + return dumpStdStringList(); + fprintf(stderr, "Unhandled type %s\n", arg); + return 1; +} -- GitLab