From fce232a1652362d7909c98c3a0ee0881fbcef91f Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 2 Feb 2011 13:22:47 +0100 Subject: [PATCH] Debugger: Change gdb binary key, do not write binaries unless changed. Reviewed-by: con --- src/plugins/debugger/debuggeractions.cpp | 40 +++++++++++++++--------- src/plugins/debugger/debuggeractions.h | 2 ++ 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp index 25519bece22..9781efd86e5 100644 --- a/src/plugins/debugger/debuggeractions.cpp +++ b/src/plugins/debugger/debuggeractions.cpp @@ -55,7 +55,7 @@ using namespace Utils; static const char debugModeSettingsGroupC[] = "DebugMode"; -static const char gdbBinariesSettingsGroupC[] = "GdbBinaries"; +static const char gdbBinariesSettingsGroupC[] = "GdbBinaries21"; static const char debugModeGdbBinaryKeyC[] = "GdbBinary"; namespace Debugger { @@ -85,16 +85,14 @@ void DebuggerSettings::insertItem(int code, SavedAction *item) m_items[code] = item; } -void DebuggerSettings::readSettings(QSettings *settings) +// Convert gdb binaries from flat settings list (see writeSettings) +// into map ("binary1=gdb,1,2", "binary2=symbian_gdb,3,4"). +DebuggerSettings::GdbBinaryToolChainMap DebuggerSettings::gdbBinaryToolChainMapFromSettings(const QSettings *settings) { - foreach (SavedAction *item, m_items) - item->readSettings(settings); - // Convert gdb binaries from flat settings list (see writeSettings) - // into map ("binary1=gdb,1,2", "binary2=symbian_gdb,3,4"). - m_gdbBinaryToolChainMap.clear(); + GdbBinaryToolChainMap gdbBinaryToolChainMap; const QChar separator = QLatin1Char(','); const QString keyRoot = QLatin1String(gdbBinariesSettingsGroupC) + QLatin1Char('/') + - QLatin1String(debugModeGdbBinaryKeyC); + QLatin1String(debugModeGdbBinaryKeyC); for (int i = 1; ; i++) { const QString value = settings->value(keyRoot + QString::number(i)).toString(); if (value.isEmpty()) @@ -108,9 +106,9 @@ void DebuggerSettings::readSettings(QSettings *settings) 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); + const QString predefinedGdb = gdbBinaryToolChainMap.key(toolChain); if (predefinedGdb.isEmpty()) { - m_gdbBinaryToolChainMap.insert(binary, toolChain); + gdbBinaryToolChainMap.insert(binary, toolChain); } else { const QString toolChainName = ProjectExplorer::ToolChain::toolChainName(static_cast(toolChain)); const QString msg = @@ -123,14 +121,24 @@ void DebuggerSettings::readSettings(QSettings *settings) } // Linux defaults #ifdef Q_OS_UNIX - if (m_gdbBinaryToolChainMap.isEmpty()) { + if (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); + gdbBinaryToolChainMap.insert(gdb, ProjectExplorer::ToolChain::GCC); + gdbBinaryToolChainMap.insert(gdb, ProjectExplorer::ToolChain::LINUX_ICC); + gdbBinaryToolChainMap.insert(gdb, ProjectExplorer::ToolChain::OTHER); + gdbBinaryToolChainMap.insert(gdb, ProjectExplorer::ToolChain::UNKNOWN); } #endif + return gdbBinaryToolChainMap; +} + +void DebuggerSettings::readSettings(QSettings *settings) +{ + foreach (SavedAction *item, m_items) + item->readSettings(settings); + // Convert gdb binaries from flat settings list (see writeSettings) + // into map ("binary1=gdb,1,2", "binary2=symbian_gdb,3,4"). + m_gdbBinaryToolChainMap = gdbBinaryToolChainMapFromSettings(settings); } void DebuggerSettings::writeSettings(QSettings *settings) const @@ -139,6 +147,8 @@ void DebuggerSettings::writeSettings(QSettings *settings) const item->writeSettings(settings); // Convert gdb binaries map into a flat settings list of // ("binary1=gdb,1,2", "binary2=symbian_gdb,3,4"). It needs to be ASCII for installers + if (m_gdbBinaryToolChainMap == gdbBinaryToolChainMapFromSettings(settings)) + return; QString lastBinary; QStringList settingsList; const QChar separator = QLatin1Char(','); diff --git a/src/plugins/debugger/debuggeractions.h b/src/plugins/debugger/debuggeractions.h index 83d624ca81d..a97d705a249 100644 --- a/src/plugins/debugger/debuggeractions.h +++ b/src/plugins/debugger/debuggeractions.h @@ -76,6 +76,8 @@ public slots: void writeSettings(QSettings *settings) const; private: + static GdbBinaryToolChainMap gdbBinaryToolChainMapFromSettings(const QSettings *s); + QHash m_items; GdbBinaryToolChainMap m_gdbBinaryToolChainMap; };