From 677edc30dc1e80b06d36b0ca3088b001b3f0555d Mon Sep 17 00:00:00 2001 From: Aurindam Jana <aurindam.jana@digia.com> Date: Wed, 6 Feb 2013 16:17:30 +0100 Subject: [PATCH] Debugger: Add a field for source path map in DebuggerStartParameters Change-Id: Ie79cdcd5c32a2204ac4b701c253d6d76bd271272 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> --- src/plugins/debugger/cdb/cdbengine.cpp | 13 +++++++++++++ src/plugins/debugger/cdb/cdbengine.h | 1 + src/plugins/debugger/debuggerstartparameters.h | 1 + src/plugins/debugger/gdb/gdbengine.cpp | 17 +++++++++++++++-- 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index 9461b63051c..1aa01ca2a16 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -431,6 +431,8 @@ void CdbEngine::init() QDir::toNativeSeparators(it.value()))); } } + // update source path maps from debugger start params + mergeStartParametersSourcePathMap(); QTC_ASSERT(m_process.state() != QProcess::Running, Utils::SynchronousProcess::stopProcess(m_process)); } @@ -2907,6 +2909,17 @@ unsigned CdbEngine::parseStackTrace(const GdbMi &data, bool sourceStepInto) return 0; } +void CdbEngine::mergeStartParametersSourcePathMap() +{ + const DebuggerStartParameters &sp = startParameters(); + QMap<QString, QString>::const_iterator end = sp.sourcePathMap.end(); + for (QMap<QString, QString>::const_iterator it = sp.sourcePathMap.begin(); it != end; ++it) { + SourcePathMapping spm(QDir::toNativeSeparators(it.key()), QDir::toNativeSeparators(it.value())); + if (!m_sourcePathMappings.contains(spm)) + m_sourcePathMappings.push_back(spm); + } +} + void CdbEngine::handleStackTrace(const CdbExtensionCommandPtr &command) { if (command->success) { diff --git a/src/plugins/debugger/cdb/cdbengine.h b/src/plugins/debugger/cdb/cdbengine.h index e063fafad21..ea740bb215e 100644 --- a/src/plugins/debugger/cdb/cdbengine.h +++ b/src/plugins/debugger/cdb/cdbengine.h @@ -243,6 +243,7 @@ private: int elapsedLogTime() const; void addLocalsOptions(ByteArrayInputStream &s) const; unsigned parseStackTrace(const GdbMi &data, bool sourceStepInto); + void mergeStartParametersSourcePathMap(); const QByteArray m_creatorExtPrefix; const QByteArray m_tokenPrefix; diff --git a/src/plugins/debugger/debuggerstartparameters.h b/src/plugins/debugger/debuggerstartparameters.h index 49290531a02..01ee773b8d8 100644 --- a/src/plugins/debugger/debuggerstartparameters.h +++ b/src/plugins/debugger/debuggerstartparameters.h @@ -123,6 +123,7 @@ public: QString localMountDir; QSsh::SshConnectionParameters connParams; bool remoteSetupNeeded; + QMap<QString, QString> sourcePathMap; QString dumperLibrary; QStringList solibSearchPath; diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index abe43cd5ace..bda2f56d2a2 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -4691,6 +4691,17 @@ static QString gdbBinary(const DebuggerStartParameters &sp) return sp.debuggerCommand; } +static GlobalDebuggerOptions::SourcePathMap mergeStartParametersSourcePathMap( + const DebuggerStartParameters &sp, const GlobalDebuggerOptions::SourcePathMap &in) +{ + // Do not overwrite user settings. + GlobalDebuggerOptions::SourcePathMap rc = sp.sourcePathMap; + QMap<QString, QString>::const_iterator end = in.end(); + for (QMap<QString, QString>::const_iterator it = in.begin(); it != end; ++it) + rc.insert(it.key(), it.value()); + return rc; +} + // // Starting up & shutting down // @@ -4829,8 +4840,10 @@ void GdbEngine::startGdb(const QStringList &args) const SourcePathMap sourcePathMap = DebuggerSourcePathMappingWidget::mergePlatformQtPath(sp, debuggerCore()->globalDebuggerOptions()->sourcePathMap); - const SourcePathMapIterator cend = sourcePathMap.constEnd(); - SourcePathMapIterator it = sourcePathMap.constBegin(); + const SourcePathMap completeSourcePathMap = + mergeStartParametersSourcePathMap(sp, sourcePathMap); + const SourcePathMapIterator cend = completeSourcePathMap.constEnd(); + SourcePathMapIterator it = completeSourcePathMap.constBegin(); for ( ; it != cend; ++it) postCommand("set substitute-path " + it.key().toLocal8Bit() + " " + it.value().toLocal8Bit()); -- GitLab