diff --git a/src/plugins/debugger/qml/qmlcppengine.cpp b/src/plugins/debugger/qml/qmlcppengine.cpp
index e2a3e2c3d33b003ac32c4c6963f82642d1958d39..f3f43cfa68d283d7cf42f4af6d00dd57e122f095 100644
--- a/src/plugins/debugger/qml/qmlcppengine.cpp
+++ b/src/plugins/debugger/qml/qmlcppengine.cpp
@@ -39,6 +39,11 @@
 
 #include <utils/qtcassert.h>
 
+#include <coreplugin/icore.h>
+#include <QtGui/QMainWindow>
+#include <QtGui/QMessageBox>
+#include <QtCore/QTimer>
+
 namespace Debugger {
 namespace Internal {
 
@@ -89,13 +94,15 @@ private:
     DebuggerEngine *m_cppEngine;
     DebuggerEngine *m_activeEngine;
     int m_stackBoundary;
+
+    QMessageBox *m_msg;
 };
 
 
 QmlCppEnginePrivate::QmlCppEnginePrivate(QmlCppEngine *parent,
         const DebuggerStartParameters &sp)
     : q(parent), m_qmlEngine(createQmlEngine(sp, q)),
-      m_cppEngine(0), m_activeEngine(0)
+      m_cppEngine(0), m_activeEngine(0), m_msg(0)
 {
     setObjectName(QLatin1String("QmlCppEnginePrivate"));
 }
@@ -588,6 +595,9 @@ void QmlCppEngine::slaveEngineStateChanged
             } else if (state() == InferiorStopRequested) {
                 EDEBUG("... AN INFERIOR STOPPED EXPECTEDLY");
                 notifyInferiorStopOk();
+            } else if (otherEngine->state() == EngineRunRequested && otherEngine == d->m_qmlEngine) {
+                EDEBUG("... BREAKPOINT HIT IN C++ BEFORE QML STARTUP");
+                QTimer::singleShot(0, this, SLOT(skipCppBreakpoint()));
             } else if (state() == EngineRunRequested) {
                 EDEBUG("... AN INFERIOR FAILED STARTUP, OTHER STOPPED EXPECTEDLY");
                 // wait for failure notification from other engine
@@ -676,6 +686,31 @@ void QmlCppEngine::showMessage(const QString &msg, int channel, int timeout) con
     DebuggerEngine::showMessage(msg, channel, timeout);
 }
 
+void QmlCppEngine::skipCppBreakpoint()
+{
+    // only used to skip breakpoint in CPP when QML not ready yet
+    QTC_ASSERT(d->m_cppEngine->state() == InferiorStopOk, return);
+    QTC_ASSERT(d->m_qmlEngine->state() == EngineRunRequested, return);
+
+    if (!d->m_msg) {
+        Core::ICore * const core = Core::ICore::instance();
+        d->m_msg = new QMessageBox(core->mainWindow());
+    }
+
+    if (d->m_msg->isHidden()) {
+        d->m_msg->setIcon(QMessageBox::Warning);
+        d->m_msg->setWindowTitle(tr("QML/C++ Debugging"));
+        d->m_msg->setText(tr("Cannot stop execution before QML engine is started. Skipping breakpoint.\nSuggestions: Move the breakpoint after QmlViewer initialization or switch to C++ only debugging"));
+        d->m_msg->setStandardButtons(QMessageBox::Ok);
+        d->m_msg->setDefaultButton(QMessageBox::Ok);
+        d->m_msg->setModal(false);
+        d->m_msg->show();
+    }
+
+    d->m_cppEngine->continueInferior();
+    resetLocation();
+}
+
 DebuggerEngine *QmlCppEngine::cppEngine() const
 {
     return d->m_cppEngine;
diff --git a/src/plugins/debugger/qml/qmlcppengine.h b/src/plugins/debugger/qml/qmlcppengine.h
index 2f7202b3980afdb842c83067ccce7f46f50597b6..322e4a9d4473c1044bbf38ea9ab6e00e026adf22 100644
--- a/src/plugins/debugger/qml/qmlcppengine.h
+++ b/src/plugins/debugger/qml/qmlcppengine.h
@@ -125,6 +125,9 @@ protected:
     void notifyEngineRunAndInferiorRunOk();
     void notifyInferiorShutdownOk();
 
+protected slots:
+    void skipCppBreakpoint();
+
 private:
     void engineStateChanged(DebuggerState newState);
     void setState(DebuggerState newState, bool forced = false);