diff --git a/share/qtcreator/gdbmacros/gdbmacros.cpp b/share/qtcreator/gdbmacros/gdbmacros.cpp
index ae677bcdb69b34885009ff9c41e97a6b17a63710..648c79e95d3fb6275e19feef723d8b8f30ccbfab 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 60e0989294b9055bb13baf75b424c76723b450b5..de8fc9f91f209a3c41137d081995825a9dc6a911 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;
 }
 
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 9dca44cb337538ba91034f5f76ebb78949fd6a25..a305eb278c694a5e9cea225a24922c9771d8841c 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -256,6 +256,7 @@ bool DebuggerListener::coreAboutToClose()
     if (answer == QMessageBox::No)
         return false;
     mgr->exitDebugger();
+    QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
     return true;
 }
 
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 59ed22c04d53e4bf1290d22db0a39ddfa43ebb53..8b1e3b2c380ac949e611f1327664d3cd13fb1448 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -225,7 +225,7 @@ QMainWindow *GdbEngine::mainWindow() const
 GdbEngine::~GdbEngine()
 {
     // prevent sending error messages afterwards
-    disconnect(&m_gdbProc);
+    disconnect(&m_gdbProc, 0, this, 0);
     delete m_gdbAdapter;
     m_gdbAdapter = 0;
 }