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());