diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index cf30cbd1fe4eb19d58584c47f57aefd104681104..030fd0f1a4a2f1651c9e598bdb689480cc2f4c6f 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -2455,34 +2455,44 @@ void DebuggerPluginPrivate::remoteCommand(const QStringList &options, QString DebuggerPluginPrivate::debuggerForAbi(const Abi &abi, DebuggerEngineType et) const { enum { debug = 0 }; - Abi searchAbi = abi; + QList<Abi> searchAbis; + searchAbis.push_back(abi); // Pick the right tool chain in case cdb/gdb were started with other tool chains. // Also, lldb should be preferred over gdb. - if (searchAbi.os() == ProjectExplorer::Abi::WindowsOS) { + if (abi.os() == ProjectExplorer::Abi::WindowsOS) { switch (et) { case CdbEngineType: - searchAbi = Abi(abi.architecture(), abi.os(), Abi::WindowsMsvc2010Flavor, - abi.binaryFormat(), abi.wordWidth()); + searchAbis.clear(); + searchAbis.push_back(Abi(abi.architecture(), abi.os(), Abi::WindowsMsvc2010Flavor, + abi.binaryFormat(), abi.wordWidth())); + searchAbis.push_back(Abi(abi.architecture(), abi.os(), Abi::WindowsMsvc2008Flavor, + abi.binaryFormat(), abi.wordWidth())); + searchAbis.push_back(Abi(abi.architecture(), abi.os(), Abi::WindowsMsvc2005Flavor, + abi.binaryFormat(), abi.wordWidth())); break; case GdbEngineType: - searchAbi = Abi(abi.architecture(), abi.os(), Abi::WindowsMSysFlavor, - abi.binaryFormat(), abi.wordWidth()); + searchAbis.clear(); + searchAbis.push_back(Abi(abi.architecture(), abi.os(), Abi::WindowsMSysFlavor, + abi.binaryFormat(), abi.wordWidth())); break; default: break; } } if (debug) - qDebug() << "debuggerForAbi" << abi.toString() << searchAbi.toString() << et; - - const QList<ToolChain *> toolchains = ToolChainManager::instance()->findToolChains(searchAbi); - // Find manually configured ones first - for (int i = toolchains.size() - 1; i >= 0; i--) { - const QString debugger = toolchains.at(i)->debuggerCommand(); - if (debug) - qDebug() << i << toolchains.at(i)->displayName() << debugger; - if (!debugger.isEmpty()) - return debugger; + qDebug() << "debuggerForAbi" << abi.toString() << searchAbis.size() + << searchAbis.front().toString() << et; + + foreach (const Abi &searchAbi, searchAbis) { + const QList<ToolChain *> toolchains = ToolChainManager::instance()->findToolChains(searchAbi); + // Find manually configured ones first + for (int i = toolchains.size() - 1; i >= 0; i--) { + const QString debugger = toolchains.at(i)->debuggerCommand(); + if (debug) + qDebug() << i << toolchains.at(i)->displayName() << debugger; + if (!debugger.isEmpty()) + return debugger; + } } return QString(); }