From c717c1f9c70fe9b5308f13f0b614de37bf1aa4da Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Mon, 25 Oct 2010 15:21:36 +0200 Subject: [PATCH] Debugger: Suppress inconsistencies in gdb binary settings. caused by the merging of global settings. Terminate list of binaries by an empty element to prevent accidental reading of consecutive keys. Add Linux-ICC to list of toolchains for gdb. Acked-by: hjk Reviewed-by: Daniel Molkentin <daniel.molkentin@nokia.com> Task-number: QTCREATORBUG-2848 --- src/plugins/debugger/debuggeractions.cpp | 22 +++++++++++++++++-- src/plugins/debugger/gdb/gdbchooserwidget.cpp | 2 ++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp index 3774c37793f..b75a5a356d8 100644 --- a/src/plugins/debugger/debuggeractions.cpp +++ b/src/plugins/debugger/debuggeractions.cpp @@ -101,14 +101,28 @@ void DebuggerSettings::readSettings(QSettings *settings) break; const QString binary = tokens.front(); tokens.pop_front(); - foreach(const QString &t, tokens) - m_gdbBinaryToolChainMap.insert(binary, t.toInt()); + foreach(const QString &t, tokens) { + // Paranoia: Check if the there is already a binary configured for the toolchain. + const int toolChain = t.toInt(); + const QString predefinedGdb = m_gdbBinaryToolChainMap.key(toolChain); + if (predefinedGdb.isEmpty()) { + m_gdbBinaryToolChainMap.insert(binary, toolChain); + } else { + const QString toolChainName = ProjectExplorer::ToolChain::toolChainName(static_cast<ProjectExplorer::ToolChain::ToolChainType>(toolChain)); + const QString msg = + QString::fromLatin1("An inconsistency has been encountered in the Ini-file '%1':\n" + "Skipping gdb binary '%2' for toolchain '%3' as '%4' is already configured for it."). + arg(settings->fileName(), binary, toolChainName, predefinedGdb); + qWarning("%s", qPrintable(msg)); + } + } } // Linux defaults #ifdef Q_OS_UNIX if (m_gdbBinaryToolChainMap.isEmpty()) { const QString gdb = QLatin1String("gdb"); m_gdbBinaryToolChainMap.insert(gdb, ProjectExplorer::ToolChain::GCC); + m_gdbBinaryToolChainMap.insert(gdb, ProjectExplorer::ToolChain::LINUX_ICC); m_gdbBinaryToolChainMap.insert(gdb, ProjectExplorer::ToolChain::OTHER); m_gdbBinaryToolChainMap.insert(gdb, ProjectExplorer::ToolChain::UNKNOWN); } @@ -133,6 +147,10 @@ void DebuggerSettings::writeSettings(QSettings *settings) const settingsList.back().append(separator); // Append toolchain to last binary settingsList.back().append(QString::number(it.value())); } + // Terminate settings list by an empty element such that consecutive keys resulting + // from ini-file merging are suppressed while reading. + settingsList.push_back(QString()); + // Write out list settings->beginGroup(QLatin1String(gdbBinariesSettingsGroupC)); settings->remove(QString()); // remove all keys in group. const int count = settingsList.size(); diff --git a/src/plugins/debugger/gdb/gdbchooserwidget.cpp b/src/plugins/debugger/gdb/gdbchooserwidget.cpp index 7c937575cba..ec666e5ddf2 100644 --- a/src/plugins/debugger/gdb/gdbchooserwidget.cpp +++ b/src/plugins/debugger/gdb/gdbchooserwidget.cpp @@ -68,6 +68,7 @@ static QList<int> allGdbToolChains() rc #ifdef Q_OS_UNIX << ProjectExplorer::ToolChain::GCC + << ProjectExplorer::ToolChain::LINUX_ICC #endif #ifdef Q_OS_WIN << ProjectExplorer::ToolChain::MinGW @@ -424,6 +425,7 @@ ToolChainSelectorWidget::ToolChainSelectorWidget(QWidget *parent) : foreach(int tc, allGdbToolChains()) { switch (tc) { case ProjectExplorer::ToolChain::GCC: + case ProjectExplorer::ToolChain::LINUX_ICC: case ProjectExplorer::ToolChain::MinGW: case ProjectExplorer::ToolChain::OTHER: case ProjectExplorer::ToolChain::UNKNOWN: -- GitLab