diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index 9461b63051c95c3db05c9dbad7edc5206a50f4fe..1aa01ca2a16e91e9e3013c296bdb632923daf0a9 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 e063fafad21e7cf7c2fcf9c67df944b9234024c3..ea740bb215e228b0b550e9f6cfe0eca150693a33 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 49290531a0261ebfb8141ee67871323ffa5097f8..01ee773b8d878646475440efba5d676419008ff5 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 abe43cd5ace493b21fa57ac179cda821e04f93cc..bda2f56d2a229e04304d89359e94b4c4ad45191c 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());