diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp
index 2a8ed5ebf0390e8eae0111d9ed4b4fcdb72e44ab..34a433b50eab2838f2111434ee29f5af729207ea 100644
--- a/src/plugins/debugger/cdb/cdbengine.cpp
+++ b/src/plugins/debugger/cdb/cdbengine.cpp
@@ -333,6 +333,18 @@ static inline QString msgNoCdbBinaryForToolChain(const ProjectExplorer::Abi &tc)
     return CdbEngine::tr("There is no CDB binary available for binaries in format '%1'").arg(tc.toString());
 }
 
+static QString cdbBinary(const DebuggerStartParameters &sp)
+{
+    if (!sp.debuggerCommand.isEmpty()) {
+        // Do not use a GDB binary if we got started for a project with MinGW runtime.
+        const bool abiMatch = sp.toolChainAbi.os() == ProjectExplorer::Abi::WindowsOS
+                    && sp.toolChainAbi.osFlavor() == ProjectExplorer::Abi::WindowsMsvcFlavor;
+        if (abiMatch)
+            return sp.debuggerCommand;
+    }
+    return debuggerCore()->debuggerForAbi(sp.toolChainAbi, CdbEngineType);
+}
+
 bool checkCdbConfiguration(const DebuggerStartParameters &sp, ConfigurationCheck *check)
 {
 #ifdef Q_OS_WIN
@@ -344,13 +356,6 @@ bool checkCdbConfiguration(const DebuggerStartParameters &sp, ConfigurationCheck
         return false;
     }
 
-    if (debuggerCore()->debuggerForAbi(sp.toolChainAbi, CdbEngineType).isEmpty()) {
-        check->errorDetails.push_back(msgNoCdbBinaryForToolChain(sp.toolChainAbi));
-        check->settingsCategory = QLatin1String(ProjectExplorer::Constants::TOOLCHAIN_SETTINGS_CATEGORY);
-        check->settingsPage = QLatin1String(ProjectExplorer::Constants::TOOLCHAIN_SETTINGS_CATEGORY);
-        return false;
-    }
-
     if (!validMode(sp.startMode)) {
         check->errorDetails.push_back(CdbEngine::tr("The CDB engine does not support start mode %1.").arg(sp.startMode));
         return false;
@@ -361,6 +366,14 @@ bool checkCdbConfiguration(const DebuggerStartParameters &sp, ConfigurationCheck
                                       arg(sp.toolChainAbi.toString()));
         return false;
     }
+
+    if (cdbBinary(sp).isEmpty()) {
+        check->errorDetails.push_back(msgNoCdbBinaryForToolChain(sp.toolChainAbi));
+        check->settingsCategory = QLatin1String(ProjectExplorer::Constants::TOOLCHAIN_SETTINGS_CATEGORY);
+        check->settingsPage = QLatin1String(ProjectExplorer::Constants::TOOLCHAIN_SETTINGS_CATEGORY);
+        return false;
+    }
+
     return true;
 #else
     Q_UNUSED(sp);
@@ -652,7 +665,7 @@ bool CdbEngine::launchCDB(const DebuggerStartParameters &sp, QString *errorMessa
     // Determine binary (force MSVC), extension lib name and path to use
     // The extension is passed as relative name with the path variable set
     //(does not work with absolute path names)
-    const QString executable = debuggerCore()->debuggerForAbi(sp.toolChainAbi, CdbEngineType);
+    const QString executable = cdbBinary(sp);
     if (executable.isEmpty()) {
         *errorMessage = tr("There is no CDB executable specified.");
         return false;
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 6a6968db288401ebb14a118b7d489205397a6ee0..95750339f5e59d875e3ee0e397deb80e3a1ae91d 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -2349,6 +2349,66 @@ void DebuggerPluginPrivate::createNewDock(QWidget *widget)
     dockWidget->show();
 }
 
+static QString formatStartParameters(DebuggerStartParameters &sp)
+{
+    QString rc;
+    QTextStream str(&rc);
+    str << "Start parameters: '" << sp.displayName << "' mode: " << sp.startMode
+        << "\nABI: " << sp.toolChainAbi.toString() << '\n';
+    if (!sp.executable.isEmpty()) {
+        str << "Executable: " << QDir::toNativeSeparators(sp.executable) << ' ' << sp.processArgs;
+        if (sp.useTerminal)
+            str << " [terminal]";
+        str << '\n';
+        if (!sp.workingDirectory.isEmpty())
+            str << "Directory: " << QDir::toNativeSeparators(sp.workingDirectory) << '\n';
+        if (sp.executableUid) {
+            str << "UID: 0x";
+            str.setIntegerBase(16);
+            str << sp.executableUid << '\n';
+            str.setIntegerBase(10);
+        }
+    }
+    if (!sp.debuggerCommand.isEmpty())
+        str << "Debugger: " << QDir::toNativeSeparators(sp.debuggerCommand) << '\n';
+    if (!sp.coreFile.isEmpty())
+        str << "Core: " << QDir::toNativeSeparators(sp.coreFile) << '\n';
+    if (sp.attachPID > 0)
+        str << "PID: " << sp.attachPID << ' ' << sp.crashParameter << '\n';
+    if (!sp.projectDir.isEmpty()) {
+        str << "Project: " << QDir::toNativeSeparators(sp.projectDir);
+        if (!sp.projectBuildDir.isEmpty())
+            str << " (built: " << QDir::toNativeSeparators(sp.projectBuildDir);
+        str << '\n';
+    }
+    if (!sp.qmlServerAddress.isEmpty())
+        str << "QML server: " << sp.qmlServerAddress << ':' << sp.qmlServerPort << '\n';
+    if (!sp.remoteChannel.isEmpty()) {
+        str << "Remote: " << sp.remoteChannel << ", " << sp.remoteArchitecture << '\n';
+        if (!sp.remoteDumperLib.isEmpty())
+            str << "Remote dumpers: " << sp.remoteDumperLib << '\n';
+        if (!sp.remoteSourcesDir.isEmpty())
+            str << "Remote sources: " << sp.remoteSourcesDir << '\n';
+        if (!sp.remoteMountPoint.isEmpty())
+            str << "Remote mount point: " << sp.remoteMountPoint << " Local: " << sp.localMountDir << '\n';
+    }
+    if (!sp.gnuTarget.isEmpty())
+        str << "Gnu target: " << sp.gnuTarget << '\n';
+    if (!sp.sysRoot.isEmpty())
+        str << "Sysroot: " << sp.sysRoot << '\n';
+    if (!sp.symbolFileName.isEmpty())
+        str << "Symbol file: " << sp.symbolFileName << '\n';
+    if (sp.useServerStartScript)
+        str << "Using server start script: " << sp.serverStartScript;
+    if (!sp.dumperLibrary.isEmpty()) {
+        str << "Dumper libraries: " << QDir::toNativeSeparators(sp.dumperLibrary);
+        foreach (const QString &dl, sp.dumperLibraryLocations)
+            str << ' ' << QDir::toNativeSeparators(dl);
+        str << '\n';
+    }
+    return rc;
+}
+
 void DebuggerPluginPrivate::runControlStarted(DebuggerEngine *engine)
 {
     activateDebugMode();
@@ -2356,6 +2416,7 @@ void DebuggerPluginPrivate::runControlStarted(DebuggerEngine *engine)
             .arg(engine->objectName())
             .arg(engine->startParameters().toolChainAbi.toString());
     showMessage(message, StatusBar);
+    showMessage(formatStartParameters(engine->startParameters()), LogDebug);
     showMessage(m_debuggerSettings->dump(), LogDebug);
     m_snapshotHandler->appendSnapshot(engine);
     connectEngine(engine);
diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp
index 9eb243c4a0d567106846cc55850bcd03a1194f2c..fc702e59d6fce67c4c770952a9ff3e6dabbaeea5 100644
--- a/src/plugins/debugger/debuggerrunner.cpp
+++ b/src/plugins/debugger/debuggerrunner.cpp
@@ -78,11 +78,13 @@ namespace Internal {
 
 bool isCdbEngineEnabled(); // Check the configuration page
 bool checkCdbConfiguration(const DebuggerStartParameters &sp, ConfigurationCheck *check);
-
 DebuggerEngine *createCdbEngine(const DebuggerStartParameters &sp,
     DebuggerEngine *masterEngine, QString *error);
+
+bool checkGdbConfiguration(const DebuggerStartParameters &sp, ConfigurationCheck *check);
 DebuggerEngine *createGdbEngine(const DebuggerStartParameters &sp,
     DebuggerEngine *masterEngine);
+
 DebuggerEngine *createScriptEngine(const DebuggerStartParameters &sp);
 DebuggerEngine *createPdbEngine(const DebuggerStartParameters &sp);
 DebuggerEngine *createTcfEngine(const DebuggerStartParameters &sp);
@@ -476,34 +478,6 @@ static QList<DebuggerEngineType> engineTypes(const DebuggerStartParameters &sp)
     return result;
 }
 
-// Engine detection logic: Configuration checks.
-
-QString msgNoBinaryForToolChain(const ProjectExplorer::Abi &tc, DebuggerEngineType et)
-{
-    return DebuggerPlugin::tr("There is no binary available for debugging binaries of type '%1' using the engine '%2'").
-            arg(tc.toString(), QLatin1String(engineTypeName(et)));
-}
-
-static inline bool engineConfigurationCheck(const DebuggerStartParameters &sp,
-                                            DebuggerEngineType et,
-                                            ConfigurationCheck *check)
-{
-    switch (et) {
-    case Debugger::CdbEngineType:
-        return checkCdbConfiguration(sp, check);
-    case Debugger::GdbEngineType:
-        if (debuggerCore()->debuggerForAbi(sp.toolChainAbi, et).isEmpty()) {
-            check->errorDetails.push_back(msgNoBinaryForToolChain(sp.toolChainAbi, et));
-            check->settingsCategory = QLatin1String(ProjectExplorer::Constants::TOOLCHAIN_SETTINGS_CATEGORY);
-            check->settingsPage = QLatin1String(ProjectExplorer::Constants::TOOLCHAIN_SETTINGS_CATEGORY);
-            return false;
-        }
-    default:
-        break;
-    }
-    return true;
-}
-
 // Engine detection logic: ConfigurationCheck.
 ConfigurationCheck::ConfigurationCheck() :
     masterSlaveEngineTypes(NoEngineType, NoEngineType)
@@ -575,9 +549,25 @@ DEBUGGER_EXPORT ConfigurationCheck checkDebugConfiguration(const DebuggerStartPa
     }
     if (debug)
         qDebug() << " Usable engines: " << engineTypeNames(usableTypes);
-    // Configuration check: Strip off non-configured engines.
-    while (!usableTypes.isEmpty() && !engineConfigurationCheck(sp, usableTypes.front(), &result))
-        usableTypes.pop_front();
+    // Configuration check: Strip off non-configured engines, find first one to use.
+    while (!usableTypes.isEmpty()) {
+        bool configurationOk = true;
+        switch (usableTypes.front()) {
+        case Debugger::CdbEngineType:
+            configurationOk = checkCdbConfiguration(sp, &result);
+            break;
+        case Debugger::GdbEngineType:
+            configurationOk = checkGdbConfiguration(sp, &result);
+            break;
+        default:
+            break;
+        }
+        if (configurationOk) {
+            break;
+        } else {
+            usableTypes.pop_front();
+        }
+    }
     if (debug)
         qDebug() << "Configured engines: " << engineTypeNames(usableTypes);
     if (usableTypes.isEmpty()) {
@@ -585,6 +575,8 @@ DEBUGGER_EXPORT ConfigurationCheck checkDebugConfiguration(const DebuggerStartPa
         return result;
     }
     // Anything left: Happy.
+    result.errorMessage.clear();
+    result.errorDetails.clear();
     if (qmlLanguage && cppLanguage) {
         result.masterSlaveEngineTypes.first = QmlCppEngineType;
         result.masterSlaveEngineTypes.second = usableTypes.front();
diff --git a/src/plugins/debugger/debuggerstartparameters.h b/src/plugins/debugger/debuggerstartparameters.h
index 64f0199ee018b72bb8e108f239adb883962ea4f3..2e762367834d5fc4e3def5b855f4253ac9127be0 100644
--- a/src/plugins/debugger/debuggerstartparameters.h
+++ b/src/plugins/debugger/debuggerstartparameters.h
@@ -96,9 +96,6 @@ public:
     QString projectBuildDir;
     QString projectDir;
 
-    // Used by combined cpp+qml debugging.
-    DebuggerEngineType cppEngineType;
-
     // Used by remote debugging.
     QString remoteChannel;
     QString remoteArchitecture;
diff --git a/src/plugins/debugger/debuggertoolchaincombobox.cpp b/src/plugins/debugger/debuggertoolchaincombobox.cpp
index b11125d1a078c7ed74d6f40f597406db581839a2..3a269c6d2109a6d9e6014731a53f23891ee6b678 100644
--- a/src/plugins/debugger/debuggertoolchaincombobox.cpp
+++ b/src/plugins/debugger/debuggertoolchaincombobox.cpp
@@ -54,10 +54,11 @@ void DebuggerToolChainComboBox::init(bool hostAbiOnly)
 {
     const ProjectExplorer::Abi hostAbi = ProjectExplorer::Abi::hostAbi();
     foreach (const ProjectExplorer::ToolChain *tc, ProjectExplorer::ToolChainManager::instance()->toolChains()) {
-        if (!hostAbiOnly || hostAbi.isCompatibleWith(tc->targetAbi())) {
+        if (!hostAbiOnly || hostAbi.os() == hostAbi.os()) { // Offer MSVC and Mingw, etc.
             const QString debuggerCommand = tc->debuggerCommand();
             if (!debuggerCommand.isEmpty()) {
-                const QString name = tr("%1 (%2)").arg(tc->displayName(), QFileInfo(debuggerCommand).baseName());
+                const QString completeBase = QFileInfo(debuggerCommand).completeBaseName();
+                const QString name = tr("%1 (%2)").arg(tc->displayName(), completeBase);
                 addItem(name, qVariantFromValue(tc->targetAbi()));
             }
         }
diff --git a/src/plugins/debugger/debuggertoolchaincombobox.h b/src/plugins/debugger/debuggertoolchaincombobox.h
index f853092dec54b440b19aaebbef28ccf6b0286356..edf3783746cd2c52570a480baa85bbdf4db9bca2 100644
--- a/src/plugins/debugger/debuggertoolchaincombobox.h
+++ b/src/plugins/debugger/debuggertoolchaincombobox.h
@@ -59,7 +59,6 @@ protected:
     virtual bool event(QEvent *event);
 
 private:
-
     ProjectExplorer::Abi abiAt(int index) const;
 };
 
diff --git a/src/plugins/debugger/gdb/codagdbadapter.cpp b/src/plugins/debugger/gdb/codagdbadapter.cpp
index dc6132c27fddad593a8f1ed78b1dffb5ca17e137..1439b74909d4fba446a192c20e34ab76520d2630 100644
--- a/src/plugins/debugger/gdb/codagdbadapter.cpp
+++ b/src/plugins/debugger/gdb/codagdbadapter.cpp
@@ -377,7 +377,7 @@ void CodaGdbAdapter::startGdb()
 {
     QStringList gdbArgs;
     gdbArgs.append(_("--nx")); // Do not read .gdbinit file
-    if (!m_engine->startGdb(gdbArgs, QString(), QString())) {
+    if (!m_engine->startGdb(gdbArgs)) {
         cleanup();
         return;
     }
diff --git a/src/plugins/debugger/gdb/coregdbadapter.cpp b/src/plugins/debugger/gdb/coregdbadapter.cpp
index 1142d0277c599400fb19ef4d33f46f25ca946bd9..b6dd59230169fb81d2959b1ee9ccfd83213eb09a 100644
--- a/src/plugins/debugger/gdb/coregdbadapter.cpp
+++ b/src/plugins/debugger/gdb/coregdbadapter.cpp
@@ -79,7 +79,7 @@ void CoreGdbAdapter::startAdapter()
     QStringList args;
     args.append(_("-ex"));
     args.append(_("set auto-solib-add off"));
-    if (!m_engine->startGdb(args))
+    if (!m_engine->startGdb(args, QString()))
         return;
 
     //if (m_executable.isEmpty()) {
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 2acecec49b564c646fc7e5b73e69cc0cc434a621..3c050a71238559d76571a5e09564c2237eed04ac 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -76,6 +76,7 @@
 #include <coreplugin/icore.h>
 #include <coreplugin/ifile.h>
 #include <projectexplorer/toolchain.h>
+#include <projectexplorer/projectexplorerconstants.h>
 #include <texteditor/itexteditor.h>
 #include <utils/qtcassert.h>
 
@@ -4203,23 +4204,62 @@ void GdbEngine::handleFetchDisassemblerByCliRangePlain(const GdbResponse &respon
         .arg(QString::fromLocal8Bit(msg)), 5000);
 }
 
+// Binary/configuration check logic.
+
+static QString gdbBinary(const DebuggerStartParameters &sp)
+{
+    // 1) Environment.
+    const QByteArray envBinary = qgetenv("QTC_DEBUGGER_PATH");
+    if (!envBinary.isEmpty())
+        return QString::fromLocal8Bit(envBinary);
+    // 2) Command explicitly specified.
+    if (!sp.debuggerCommand.isEmpty()) {
+#ifdef Q_OS_WIN
+        // Do not use a CDB binary if we got started for a project with MSVC runtime.
+        const bool abiMatch = sp.toolChainAbi.os() != ProjectExplorer::Abi::WindowsOS
+                || sp.toolChainAbi.osFlavor() == ProjectExplorer::Abi::WindowsMSysFlavor;
+#else
+        const bool abiMatch = true;
+#endif
+        if (abiMatch)
+            return sp.debuggerCommand;
+    }
+    // 3) Find one from toolchains.
+    return debuggerCore()->debuggerForAbi(sp.toolChainAbi, GdbEngineType);
+}
+
+bool checkGdbConfiguration(const DebuggerStartParameters &sp, ConfigurationCheck *check)
+{
+    const QString binary = gdbBinary(sp);
+    if (gdbBinary(sp).isEmpty()) {
+        check->errorDetails.push_back(msgNoGdbBinaryForToolChain(sp.toolChainAbi));
+        check->settingsCategory = QLatin1String(ProjectExplorer::Constants::TOOLCHAIN_SETTINGS_CATEGORY);
+        check->settingsPage = QLatin1String(ProjectExplorer::Constants::TOOLCHAIN_SETTINGS_CATEGORY);
+        return false;
+    }
+#ifdef Q_OS_WIN
+    // See initialization below, we need an absolute path to be able to locate Python on Windows.
+    if (!QFileInfo(binary).isAbsolute()) {
+        check->errorDetails.push_back(GdbEngine::tr("The gdb location must be given as an "
+                                                    "absolute path in the debugger settings (%1).").arg(binary));
+        check->settingsCategory = QLatin1String(ProjectExplorer::Constants::TOOLCHAIN_SETTINGS_CATEGORY);
+        check->settingsPage = QLatin1String(ProjectExplorer::Constants::TOOLCHAIN_SETTINGS_CATEGORY);
+        return false;
+    }
+#endif
+    return true;
+}
 
 //
 // Starting up & shutting down
 //
 
-bool GdbEngine::startGdb(const QStringList &args, const QString &gdb,
-    const QString &settingsIdHint)
+bool GdbEngine::startGdb(const QStringList &args, const QString &settingsIdHint)
 {
     gdbProc()->disconnect(); // From any previous runs
 
     const DebuggerStartParameters &sp = startParameters();
-    m_gdb = QString::fromLocal8Bit(qgetenv("QTC_DEBUGGER_PATH"));
-    if (m_gdb.isEmpty() && sp.startMode != StartRemoteGdb) {
-        m_gdb = debuggerCore()->debuggerForAbi(startParameters().toolChainAbi, GdbEngineType);
-    }
-    if (m_gdb.isEmpty())
-        m_gdb = gdb;
+    m_gdb = gdbBinary(sp);
     if (m_gdb.isEmpty()) {
         handleAdapterStartFailed(
             msgNoGdbBinaryForToolChain(sp.toolChainAbi),
@@ -4237,13 +4277,7 @@ bool GdbEngine::startGdb(const QStringList &args, const QString &gdb,
     // Set python path. By convention, python is located below gdb executable.
     // Extend the environment set on the process in startAdapter().
     const QFileInfo fi(m_gdb);
-    if (!fi.isAbsolute()) {
-        showMessage(_("GDB %1 DOES NOT HAVE ABSOLUTE LOCATION.").arg(m_gdb));
-        const QString msg = tr("The gdb location must be given as an "
-            "absolute path in the debugger settings.");
-        handleAdapterStartFailed(msg, settingsIdHint);
-        return false;
-    }
+    QTC_ASSERT(fi.isAbsolute(), return false; )
 
     const QString winPythonVersion = _(winPythonVersionC);
     const QDir dir = fi.absoluteDir();
diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h
index 68ab7e949a1d7c7c91c2aad91f8d79520890be5b..1919e52ff2765c05d48018c4a04de413651928f0 100644
--- a/src/plugins/debugger/gdb/gdbengine.h
+++ b/src/plugins/debugger/gdb/gdbengine.h
@@ -132,7 +132,6 @@ private: ////////// Gdb Process Management //////////
 
     AbstractGdbAdapter *createAdapter();
     bool startGdb(const QStringList &args = QStringList(),
-                  const QString &gdb = QString(),
                   const QString &settingsIdHint = QString());
     void handleInferiorShutdown(const GdbResponse &response);
     void handleGdbExit(const GdbResponse &response);
diff --git a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp
index 49b13c54db4443927b6a5843e49466c5e1212301..ccae4db80046d055a02b3e9df47da3a8392f78bd 100644
--- a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp
+++ b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp
@@ -317,7 +317,7 @@ void RemoteGdbServerAdapter::handleRemoteSetupDone(int gdbServerPort, int qmlPor
 
 void RemoteGdbServerAdapter::handleSetupDone()
 {
-    if (m_engine->startGdb(QStringList(), startParameters().debuggerCommand))
+    if (m_engine->startGdb())
         m_engine->handleAdapterStarted();
 }
 
diff --git a/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp b/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp
index aa3dea22651c1e2aed1fee95dd062bd1c0306bbf..18f064552625d25223d93165c157b50c6d978ab6 100644
--- a/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp
+++ b/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp
@@ -123,8 +123,7 @@ void RemotePlainGdbAdapter::handleRemoteSetupDone(int gdbServerPort, int qmlPort
 
 void RemotePlainGdbAdapter::handleGdbStarted()
 {
-    if (m_engine->startGdb(QStringList(),
-            m_engine->startParameters().debuggerCommand))
+    if (m_engine->startGdb())
         m_engine->handleAdapterStarted();
 }
 
diff --git a/src/plugins/debugger/gdb/trkgdbadapter.cpp b/src/plugins/debugger/gdb/trkgdbadapter.cpp
index 00ffe5b3721404d95a12c2ad43996376f91c9a0e..5876e25e07fb711300892500d3a365767288df6f 100644
--- a/src/plugins/debugger/gdb/trkgdbadapter.cpp
+++ b/src/plugins/debugger/gdb/trkgdbadapter.cpp
@@ -1475,7 +1475,7 @@ void TrkGdbAdapter::slotStartGdb()
 {
     QStringList gdbArgs;
     gdbArgs.append(QLatin1String("--nx")); // Do not read .gdbinit file
-    if (!m_engine->startGdb(gdbArgs, QString(), QString())) {
+    if (!m_engine->startGdb(gdbArgs)) {
         cleanup();
         return;
     }