diff options
author | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2009-10-27 09:51:14 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2009-10-27 09:51:14 +0100 |
commit | 3fd1e5b23fd3917681f98e6b30e5b9c51f37a7e7 (patch) | |
tree | 48496e9a39f8d0e3ac810fd949f549ea6e5bc8e9 /share | |
parent | f244008a0fc9e6f59b57c9408939baf388a2a15f (diff) | |
download | qt-creator-3fd1e5b23fd3917681f98e6b30e5b9c51f37a7e7.tar.gz |
Debugger: Fix exit crash, dump QVariantList with gdb
Handle QVariantList within dumpers, as gdb does not resolve
typedefs. Disconnect the gdb process on exit, one more round
of event loop when quitting.
Diffstat (limited to 'share')
-rw-r--r-- | share/qtcreator/gdbmacros/gdbmacros.cpp | 11 | ||||
-rw-r--r-- | share/qtcreator/gdbmacros/test/main.cpp | 22 |
2 files changed, 31 insertions, 2 deletions
diff --git a/share/qtcreator/gdbmacros/gdbmacros.cpp b/share/qtcreator/gdbmacros/gdbmacros.cpp index ae677bcdb6..648c79e95d 100644 --- a/share/qtcreator/gdbmacros/gdbmacros.cpp +++ b/share/qtcreator/gdbmacros/gdbmacros.cpp @@ -3590,10 +3590,16 @@ static void handleProtocolVersion2and3(QDumper &d) break; case 'V': #ifndef QT_BOOTSTRAPPED - if (isEqual(type, "QVariant")) + if (isEqual(type, "QVariantList")) { // resolve typedef + d.outerType = "QList"; + d.innerType = "QVariant"; + d.extraInt[0] = sizeof(QVariant); + qDumpQList(d); + } else if (isEqual(type, "QVariant")) { qDumpQVariant(d); - else if (isEqual(type, "QVector")) + } else if (isEqual(type, "QVector")) { qDumpQVector(d); + } #endif break; case 'W': @@ -3801,6 +3807,7 @@ void *qDumpObjectData440( "\""NS"QStringList\"," "\""NS"QTextCodec\"," "\""NS"QVariant\"," + "\""NS"QVariantList\"," "\""NS"QVector\"," #if QT_VERSION >= 0x040500 "\""NS"QMultiMap\"," diff --git a/share/qtcreator/gdbmacros/test/main.cpp b/share/qtcreator/gdbmacros/test/main.cpp index 60e0989294..de8fc9f91f 100644 --- a/share/qtcreator/gdbmacros/test/main.cpp +++ b/share/qtcreator/gdbmacros/test/main.cpp @@ -280,6 +280,27 @@ static int dumpQVariant() return 0; } +static int dumpQVariantList() +{ + QVariantList test; + if (!optEmptyContainers) { + test.push_back(QVariant(QLatin1String("hallo"))); + test.push_back(QVariant(42)); + test.push_back(QVariant(3.141)); + } + // As a list + prepareInBuffer("QList", "local.qvariantlist", "local.qvariantlist", "QVariant"); + qDumpObjectData440(2, 42, testAddress(&test), 1, sizeof(QVariant), 0,0 ,0); + fputs(qDumpOutBuffer, stdout); + // As typedef + fputs("\n\n", stdout); + prepareInBuffer("QVariantList", "local.qvariantlist", "local.qvariantlist", ""); + qDumpObjectData440(2, 42, testAddress(&test), 1, 0, 0,0 ,0); + fputs(qDumpOutBuffer, stdout); + fputc('\n', stdout); + return 0; +} + // --------------- std types static int dumpStdString() @@ -548,6 +569,7 @@ static TypeDumpFunctionMap registerTypes() rc.insert("QObject", dumpQObject); rc.insert("QObjectList", dumpQObjectList); rc.insert("QVariant", dumpQVariant); + rc.insert("QVariantList", dumpQVariantList); return rc; } |