diff options
author | Friedemann Kleint <[email protected]> | 2010-04-08 16:55:25 +0200 |
---|---|---|
committer | Friedemann Kleint <[email protected]> | 2010-04-08 16:55:25 +0200 |
commit | da221819165d8b72d985808e682866ace5cace10 (patch) | |
tree | 787cccf91d5110fe08967e613636855500c09f63 /src/plugins/debugger/debuggeractions.cpp | |
parent | 852585b69d92ca67ac2b6c50f7f10c1e3f1db0f6 (diff) |
Debugger[gdb]: Introduce new control for gdb binaries.
Manage binaries as a map of binary-><toolchain number>.
Provide list widget and editing dialog with tooltip
showing the version. Save in settings as a flat list of
keys.
Acked-by: hjk
Diffstat (limited to 'src/plugins/debugger/debuggeractions.cpp')
-rw-r--r-- | src/plugins/debugger/debuggeractions.cpp | 68 |
1 files changed, 58 insertions, 10 deletions
diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp index f462261d967..7a8d7a3c485 100644 --- a/src/plugins/debugger/debuggeractions.cpp +++ b/src/plugins/debugger/debuggeractions.cpp @@ -32,11 +32,14 @@ #include "registerpostmortemaction.h" #endif +#include <projectexplorer/toolchain.h> + #include <utils/savedaction.h> #include <utils/qtcassert.h> #include <utils/pathchooser.h> #include <QtCore/QDebug> +#include <QtCore/QVariant> #include <QtCore/QSettings> #include <QtGui/QAction> @@ -47,6 +50,10 @@ using namespace Utils; +static const char debugModeSettingsGroupC[] = "DebugMode"; +static const char gdbBinariesSettingsGroupC[] = "GdbBinaries"; +static const char debugModeGdbBinaryKeyC[] = "GdbBinary"; + namespace Debugger { namespace Internal { @@ -57,7 +64,7 @@ namespace Internal { ////////////////////////////////////////////////////////////////////////// DebuggerSettings::DebuggerSettings(QObject *parent) - : QObject(parent) + : QObject(parent), m_gdbBinaryToolChainMap(new GdbBinaryToolChainMap) {} DebuggerSettings::~DebuggerSettings() @@ -78,12 +85,61 @@ 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->clear(); + const QChar separator = QLatin1Char(','); + const QString keyRoot = QLatin1String(gdbBinariesSettingsGroupC) + QLatin1Char('/') + + QLatin1String(debugModeGdbBinaryKeyC); + for (int i = 1; ; i++) { + const QString value = settings->value(keyRoot + QString::number(i)).toString(); + if (value.isEmpty()) + break; + // Split apart comma-separated binary and its numerical toolchains. + QStringList tokens = value.split(separator); + if (tokens.size() < 2) + break; + const QString binary = tokens.front(); + tokens.pop_front(); + foreach(const QString &t, tokens) + m_gdbBinaryToolChainMap->insert(binary, t.toInt()); + } + // 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::OTHER); + m_gdbBinaryToolChainMap->insert(gdb, ProjectExplorer::ToolChain::UNKNOWN); + } +#endif } void DebuggerSettings::writeSettings(QSettings *settings) const { foreach (SavedAction *item, m_items) 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 + QString lastBinary; + QStringList settingsList; + const QChar separator = QLatin1Char(','); + const GdbBinaryToolChainMap::const_iterator cend = m_gdbBinaryToolChainMap->constEnd(); + for (GdbBinaryToolChainMap::const_iterator it = m_gdbBinaryToolChainMap->constBegin(); it != cend; ++it) { + if (it.key() != lastBinary) { + lastBinary = it.key(); // Start new entry with first toolchain + settingsList.push_back(lastBinary); + } + settingsList.back().append(separator); // Append toolchain to last binary + settingsList.back().append(QString::number(it.value())); + } + settings->beginGroup(QLatin1String(gdbBinariesSettingsGroupC)); + settings->remove(QString()); // remove all keys in group. + const int count = settingsList.size(); + const QString keyRoot = QLatin1String(debugModeGdbBinaryKeyC); + for (int i = 0; i < count; i++) + settings->setValue(keyRoot + QString::number(i + 1), settingsList.at(i)); + settings->endGroup(); } SavedAction *DebuggerSettings::item(int code) const @@ -112,7 +168,7 @@ DebuggerSettings *DebuggerSettings::instance() if (instance) return instance; - const QString debugModeGroup = QLatin1String("DebugMode"); + const QString debugModeGroup = QLatin1String(debugModeSettingsGroupC); instance = new DebuggerSettings; SavedAction *item = 0; @@ -309,14 +365,6 @@ DebuggerSettings *DebuggerSettings::instance() // // Settings // - item = new SavedAction(instance); - item->setSettingsKey(debugModeGroup, QLatin1String("Location")); -#ifdef Q_OS_WIN - item->setDefaultValue(QLatin1String("gdb-i686-pc-mingw32.exe")); -#else - item->setDefaultValue(QLatin1String("gdb")); -#endif - instance->insertItem(GdbLocation, item); item = new SavedAction(instance); item->setSettingsKey(debugModeGroup, QLatin1String("Environment")); |