summaryrefslogtreecommitdiff
path: root/share
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>2009-10-27 09:51:14 +0100
committerFriedemann Kleint <Friedemann.Kleint@nokia.com>2009-10-27 09:51:14 +0100
commit3fd1e5b23fd3917681f98e6b30e5b9c51f37a7e7 (patch)
tree48496e9a39f8d0e3ac810fd949f549ea6e5bc8e9 /share
parentf244008a0fc9e6f59b57c9408939baf388a2a15f (diff)
downloadqt-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.cpp11
-rw-r--r--share/qtcreator/gdbmacros/test/main.cpp22
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;
}