diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp
index ae30132b3bc6a39ddf20f273767d028a5173331b..40767c41baf3d6fecde86b53e44ab9da6c9549bc 100644
--- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp
@@ -170,6 +170,12 @@ QString CMakeRunConfiguration::dumperLibrary() const
     return dhl;
 }
 
+QStringList CMakeRunConfiguration::dumperLibraryLocations() const
+{
+    QString qmakePath = ProjectExplorer::DebuggingHelperLibrary::findSystemQt(environment());
+    return ProjectExplorer::DebuggingHelperLibrary::debuggingHelperLibraryLocations(qmakePath);
+}
+
 ProjectExplorer::Environment CMakeRunConfiguration::baseEnvironment() const
 {
     ProjectExplorer::Environment env;
diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h
index 57c09a3e4aba522b56e6767c4b69b26b36cdb471..35be599c57d3b68cd343b69cd7a3836ba64e3002 100644
--- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h
+++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h
@@ -70,6 +70,7 @@ public:
     virtual void save(ProjectExplorer::PersistentSettingsWriter &writer) const;
     virtual void restore(const ProjectExplorer::PersistentSettingsReader &reader);
     virtual QString dumperLibrary() const;
+    virtual QStringList dumperLibraryLocations() const;
     virtual ProjectExplorer::ToolChain::ToolChainType toolChainType() const;
 
 signals:
diff --git a/src/plugins/debugger/cdb/cdbdebugengine.cpp b/src/plugins/debugger/cdb/cdbdebugengine.cpp
index 798f5234ff46edfc5d6879d4f29d6c1695ab6a94..365252f876a61688189f96c50ae7e09714bc0f40 100644
--- a/src/plugins/debugger/cdb/cdbdebugengine.cpp
+++ b/src/plugins/debugger/cdb/cdbdebugengine.cpp
@@ -539,12 +539,13 @@ bool CdbDebugEngine::startDebugger(const QSharedPointer<DebuggerStartParameters>
     const QString dumperLibName = QDir::toNativeSeparators(m_d->m_debuggerManagerAccess->qtDumperLibraryName());
     bool dumperEnabled = mode != AttachCore
                          && mode != AttachCrashedExternal
-                         && !dumperLibName.isEmpty()
                          && m_d->m_debuggerManagerAccess->qtDumperLibraryEnabled();
     if (dumperEnabled) {
         const QFileInfo fi(dumperLibName);
         if (!fi.isFile()) {
-            const QString msg = tr("The dumper library '%1' does not exist.").arg(dumperLibName);
+            const QStringList &locations = m_d->m_debuggerManagerAccess->qtDumperLibraryLocations();
+            const QString loc = locations.join(QLatin1String(", "));
+            const QString msg = tr("The dumper library was not found at %1.").arg(loc);
             m_d->m_debuggerManagerAccess->showQtDumperLibraryWarning(msg);
             dumperEnabled = false;
         }
diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp
index 15c586b5bba226397c49f1cf81c3a15ef912e571..87571d84027ef831fa2deeb4e4564a56f1fc4676 100644
--- a/src/plugins/debugger/debuggermanager.cpp
+++ b/src/plugins/debugger/debuggermanager.cpp
@@ -1004,6 +1004,11 @@ void DebuggerManager::setQtDumperLibraryName(const QString &dl)
     m_dumperLib = dl;
 }
 
+void DebuggerManager::setQtDumperLibraryLocations(const QStringList &dl)
+{
+    m_dumperLibLocations = dl;
+}
+
 qint64 DebuggerManager::inferiorPid() const
 {
     return m_inferiorPid;
@@ -1518,6 +1523,15 @@ QString DebuggerManager::qtDumperLibraryName() const
     return m_dumperLib;
 }
 
+QStringList DebuggerManager::qtDumperLibraryLocations() const
+{
+    if (theDebuggerAction(UseCustomDebuggingHelperLocation)->value().toBool())
+        return QStringList() <<
+                ( theDebuggerAction(CustomDebuggingHelperLocation)->value().toString()
+                  + tr(" (explicitly set in the Debugger Options)"));
+    return m_dumperLibLocations;
+}
+
 void DebuggerManager::showQtDumperLibraryWarning(const QString &details)
 {
     QMessageBox dialog(mainWindow());
diff --git a/src/plugins/debugger/debuggermanager.h b/src/plugins/debugger/debuggermanager.h
index c153465c884ca1bf2a1b492a7a2c6fa0627e0f60..cc09c8f6bb480f48ebf8ddce10552d89ae450504 100644
--- a/src/plugins/debugger/debuggermanager.h
+++ b/src/plugins/debugger/debuggermanager.h
@@ -236,6 +236,7 @@ private:
 
     virtual bool qtDumperLibraryEnabled() const = 0;
     virtual QString qtDumperLibraryName() const = 0;
+    virtual QStringList qtDumperLibraryLocations() const = 0;
     virtual void showQtDumperLibraryWarning(const QString &details = QString()) = 0;
     virtual bool isReverseDebugging() const = 0;
 
@@ -272,6 +273,7 @@ public slots:
     virtual qint64 inferiorPid() const;
 
     void setQtDumperLibraryName(const QString &dl); // Run Control
+    void setQtDumperLibraryLocations(const QStringList &dl);
 
     void setSimpleDockWidgetArrangement();
     void setLocked(bool locked);
@@ -376,6 +378,7 @@ private:
 
     virtual bool qtDumperLibraryEnabled() const;
     virtual QString qtDumperLibraryName() const;
+    virtual QStringList qtDumperLibraryLocations() const;
     virtual void showQtDumperLibraryWarning(const QString &details = QString());
     virtual bool isReverseDebugging() const;
 
@@ -434,6 +437,7 @@ private:
     QSharedPointer<DebuggerStartParameters> m_startParameters;
     DebuggerRunControl *m_runControl;
     QString m_dumperLib;
+    QStringList m_dumperLibLocations;
     qint64 m_inferiorPid;
 
 
diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp
index 4b151c52cfad6af2a7e409c14441b27248e6085c..b1d531493e4fe799e2b5ab92303d2fb5f6ff9408 100644
--- a/src/plugins/debugger/debuggerrunner.cpp
+++ b/src/plugins/debugger/debuggerrunner.cpp
@@ -158,6 +158,7 @@ void DebuggerRunControl::start()
             break;
         }
         m_manager->setQtDumperLibraryName(rc->dumperLibrary());
+        m_manager->setQtDumperLibraryLocations(rc->dumperLibraryLocations());
         if (const ProjectExplorer::Project *project = rc->project()) {
             m_startParameters->buildDir = project->buildDirectory(project->activeBuildConfiguration());
         }
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index fa8f9d7a0a2514664fd9aec9978b19397a63396e..917d68c597cb4eb297bbbc393b425354aebecae1 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -3855,11 +3855,13 @@ void GdbEngine::tryLoadDebuggingHelpers()
     if (!qq->qtDumperLibraryEnabled())
         return;
     const QString lib = qq->qtDumperLibraryName();
+    const QStringList &locations = qq->qtDumperLibraryLocations();
     //qDebug() << "DUMPERLIB:" << lib;
     // @TODO: same in CDB engine...
     const QFileInfo fi(lib);
     if (!fi.exists()) {
-        const QString msg = tr("The dumper library '%1' does not exist.").arg(lib);
+        const QString loc = locations.join(QLatin1String(", "));
+        const QString msg = tr("The dumper library was not found at %1.").arg(loc);
         debugMessage(msg);
         qq->showQtDumperLibraryWarning(msg);
         return;
diff --git a/src/plugins/projectexplorer/applicationrunconfiguration.h b/src/plugins/projectexplorer/applicationrunconfiguration.h
index 6d347c0ab62aff007ddbe79c3070a6d8ee7552d5..0f4315844c1dfd716bcf8a12f0f250499eb3e309 100644
--- a/src/plugins/projectexplorer/applicationrunconfiguration.h
+++ b/src/plugins/projectexplorer/applicationrunconfiguration.h
@@ -57,6 +57,7 @@ public:
     virtual QStringList commandLineArguments() const = 0;
     virtual Environment environment() const = 0;
     virtual QString dumperLibrary() const = 0;
+    virtual QStringList dumperLibraryLocations() const = 0;
     virtual ProjectExplorer::ToolChain::ToolChainType toolChainType() const = 0;
 
     virtual void save(PersistentSettingsWriter &writer) const;
diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
index 97de1178176ec1748a8f7cea50ce9a6fe510bab5..ad516a218a444903232bae7176b0e373b90fab52 100644
--- a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
+++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
@@ -459,6 +459,12 @@ QString CustomExecutableRunConfiguration::dumperLibrary() const
     return ProjectExplorer::DebuggingHelperLibrary::debuggingHelperLibrary(qmakePath);
 }
 
+QStringList CustomExecutableRunConfiguration::dumperLibraryLocations() const
+{
+    QString qmakePath = ProjectExplorer::DebuggingHelperLibrary::findSystemQt(environment());
+    return ProjectExplorer::DebuggingHelperLibrary::debuggingHelperLibraryLocations(qmakePath);
+}
+
 ProjectExplorer::ToolChain::ToolChainType CustomExecutableRunConfiguration::toolChainType() const
 {
     return ProjectExplorer::ToolChain::UNKNOWN;
diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.h b/src/plugins/projectexplorer/customexecutablerunconfiguration.h
index 894116fc08e46413cedb8e805502a6c7afa5c5ae..81db5a1fa7722f329e8c87b173775845521333e2 100644
--- a/src/plugins/projectexplorer/customexecutablerunconfiguration.h
+++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.h
@@ -89,6 +89,7 @@ public:
 
     virtual QWidget *configurationWidget();
     virtual QString dumperLibrary() const;
+    virtual QStringList dumperLibraryLocations() const;
 
     virtual ProjectExplorer::ToolChain::ToolChainType toolChainType() const;
 
diff --git a/src/plugins/projectexplorer/debugginghelper.cpp b/src/plugins/projectexplorer/debugginghelper.cpp
index fbbab7f5f3a79b8631e488cf4b14126ae1c354fc..8af5ba3045612b045dd6f540ef2d5bc0bdee424c 100644
--- a/src/plugins/projectexplorer/debugginghelper.cpp
+++ b/src/plugins/projectexplorer/debugginghelper.cpp
@@ -66,11 +66,16 @@ QStringList DebuggingHelperLibrary::debuggingHelperLibraryDirectories(const QStr
     QStringList directories;
     directories
             << (qtInstallData + "/qtc-debugging-helper/")
-            << (QApplication::applicationDirPath() + "/../qtc-debugging-helper/" + QString::number(hash)) + "/"
+            << QDir::cleanPath((QApplication::applicationDirPath() + "/../qtc-debugging-helper/" + QString::number(hash))) + "/"
             << (QDesktopServices::storageLocation(QDesktopServices::DataLocation) + "/qtc-debugging-helper/" + QString::number(hash)) + "/";
     return directories;
 }
 
+QStringList DebuggingHelperLibrary::debuggingHelperLibraryLocations(const QString &qmakePath)
+{
+    return debuggingHelperLibraryLocations(qtInstallDataDir(qmakePath), qtDir(qmakePath));
+}
+
 QString DebuggingHelperLibrary::debuggingHelperLibrary(const QString &qmakePath)
 {
     return debuggingHelperLibrary(qtInstallDataDir(qmakePath), qtDir(qmakePath));
@@ -94,6 +99,22 @@ QString DebuggingHelperLibrary::qtDir(const QString &qmakePath)
 
 // Debugging Helper Library
 
+QStringList DebuggingHelperLibrary::debuggingHelperLibraryLocations(const QString &qtInstallData, const QString &qtpath)
+{
+    QStringList result;
+    foreach(const QString &directory, debuggingHelperLibraryDirectories(qtInstallData, qtpath)) {
+#if defined(Q_OS_WIN)
+        QFileInfo fi(directory + "debug/gdbmacros.dll");
+#elif defined(Q_OS_MAC)
+        QFileInfo fi(directory + "libgdbmacros.dylib");
+#else // generic UNIX
+        QFileInfo fi(directory + "libgdbmacros.so");
+#endif
+        result << fi.filePath();
+    }
+    return result;
+}
+
 QString DebuggingHelperLibrary::debuggingHelperLibrary(const QString &qtInstallData, const QString &qtpath)
 {
     foreach(const QString &directory, debuggingHelperLibraryDirectories(qtInstallData, qtpath)) {
diff --git a/src/plugins/projectexplorer/debugginghelper.h b/src/plugins/projectexplorer/debugginghelper.h
index 3717e32b85d22dee7a9352b1136520d154882cac..a98ab2a6166d4baaa6bc4b3eb2c0380e93181e6d 100644
--- a/src/plugins/projectexplorer/debugginghelper.h
+++ b/src/plugins/projectexplorer/debugginghelper.h
@@ -49,11 +49,18 @@ public:
     static QString qtVersionForQMake(const QString &qmakePath);
 
     static bool hasDebuggingHelperLibrary(const QString &qmakePath);
+
     static QString debuggingHelperLibrary(const QString &qmakePath);
-    static QString buildDebuggingHelperLibrary(const QString &qmakePath, const QString &make, const Environment &env);
     static QString debuggingHelperLibrary(const QString &qtInstallData, const QString &qtpath);
-    static QString copyDebuggingHelperLibrary(const QString &qtInstallData, const QString &qtdir);
+
+    static QString buildDebuggingHelperLibrary(const QString &qmakePath, const QString &make, const Environment &env);
     static QString buildDebuggingHelperLibrary(const QString &directory, const QString &makeCommand, const QString &qmakeCommand, const QString &mkspec, const Environment &env);
+
+    static QStringList debuggingHelperLibraryLocations(const QString &qmakePath);
+    static QStringList debuggingHelperLibraryLocations(const QString &qtInstallData, const QString &qtpath);
+
+    static QString copyDebuggingHelperLibrary(const QString &qtInstallData, const QString &qtdir);
+
 private:
     static QStringList debuggingHelperLibraryDirectories(const QString &qtInstallData, const QString &qtpath);
     static QString qtInstallDataDir(const QString &qmakePath);
diff --git a/src/plugins/qmlprojectmanager/qmlproject.cpp b/src/plugins/qmlprojectmanager/qmlproject.cpp
index 0c9670ca6bfbecd85287fbfc852c681fa7ffb499..b9a7d2e5d2b85849feb9323319dd4190a46ec8b2 100644
--- a/src/plugins/qmlprojectmanager/qmlproject.cpp
+++ b/src/plugins/qmlprojectmanager/qmlproject.cpp
@@ -381,6 +381,11 @@ QString QmlRunConfiguration::dumperLibrary() const
     return QString();
 }
 
+QStringList QmlRunConfiguration::dumperLibraryLocations() const
+{
+    return QStringList();
+}
+
 QWidget *QmlRunConfiguration::configurationWidget()
 {
     QWidget *config = new QWidget;
diff --git a/src/plugins/qmlprojectmanager/qmlproject.h b/src/plugins/qmlprojectmanager/qmlproject.h
index b540f85c0f9a189a268690d7cad1de9d07632df9..662abdeb8828126d0b5a940c34a6cfe64c17480c 100644
--- a/src/plugins/qmlprojectmanager/qmlproject.h
+++ b/src/plugins/qmlprojectmanager/qmlproject.h
@@ -150,6 +150,7 @@ public:
     virtual QStringList commandLineArguments() const;
     virtual ProjectExplorer::Environment environment() const;
     virtual QString dumperLibrary() const;
+    virtual QStringList dumperLibraryLocations() const;
     virtual QWidget *configurationWidget();
 
     ProjectExplorer::ToolChain::ToolChainType toolChainType() const { return ProjectExplorer::ToolChain::OTHER; }
diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
index 8d07707e7f85e76c85dcfed792a7b8d707161c1e..953f90a9ab9586e9bd1929a4c40ab2f576d08ee7 100644
--- a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
@@ -637,6 +637,13 @@ QString Qt4RunConfiguration::dumperLibrary() const
     return version->debuggingHelperLibrary();
 }
 
+QStringList Qt4RunConfiguration::dumperLibraryLocations() const
+{
+    Qt4Project *pro = qobject_cast<Qt4Project *>(project());
+    QtVersion *version = pro->qtVersion(pro->activeBuildConfiguration());
+    return version->debuggingHelperLibraryLocations();;
+}
+
 void Qt4RunConfiguration::setBaseEnvironmentBase(BaseEnvironmentBase env)
 {
     if (m_baseEnvironmentBase == env)
diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.h b/src/plugins/qt4projectmanager/qt4runconfiguration.h
index db7b015d42bad88adcbdf25a2781d2b193adeec6..e2fb3845114857bac5a713bf886505aa630f9eb3 100644
--- a/src/plugins/qt4projectmanager/qt4runconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt4runconfiguration.h
@@ -74,6 +74,7 @@ public:
     virtual QStringList commandLineArguments() const;
     virtual ProjectExplorer::Environment environment() const;
     virtual QString dumperLibrary() const;
+    virtual QStringList dumperLibraryLocations() const;
     virtual ProjectExplorer::ToolChain::ToolChainType toolChainType() const;
 
     bool isUsingDyldImageSuffix() const;
diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp
index 6e49ff08dd25d4608aa1a6cb68190027bb1d4ca5..0005049ad4e263d3b65dd925ffd0cc5f41849bd6 100644
--- a/src/plugins/qt4projectmanager/qtversionmanager.cpp
+++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp
@@ -1102,6 +1102,14 @@ QString QtVersion::debuggingHelperLibrary() const
     return DebuggingHelperLibrary::debuggingHelperLibrary(qtInstallData, path());
 }
 
+QStringList QtVersion::debuggingHelperLibraryLocations() const
+{
+    QString qtInstallData = versionInfo().value("QT_INSTALL_DATA");
+    if (qtInstallData.isEmpty())
+        qtInstallData = path();
+    return DebuggingHelperLibrary::debuggingHelperLibraryLocations(qtInstallData, path());
+}
+
 bool QtVersion::hasDocumentation() const
 {
     updateVersionInfo();
diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h
index 6debdcc9d24259627a47c9780c1bcf2a60e24881..f76dd602ea95189bed4d2f88abf28b071ce188b5 100644
--- a/src/plugins/qt4projectmanager/qtversionmanager.h
+++ b/src/plugins/qt4projectmanager/qtversionmanager.h
@@ -96,6 +96,7 @@ public:
 
     bool hasDebuggingHelper() const;
     QString debuggingHelperLibrary() const;
+    QStringList debuggingHelperLibraryLocations() const;
 
     // Builds a debugging library
     // returns the output of the commands