QmlCppDebugger: Shutdown engine on port busy

Shutdown the debugger engines when the qmljsdebugger port
is busy.

Change-Id: If7f470b04bae26f3bac11863f697b260b463ca4e
Reviewed-by: Kai Koehne <kai.koehne@nokia.com>
This commit is contained in:
Aurindam Jana
2012-02-23 13:03:22 +01:00
parent 69ab35d199
commit 6668ee1317
3 changed files with 22 additions and 43 deletions

View File

@@ -790,6 +790,8 @@ void QmlCppEngine::slaveEngineStateChanged
QTC_ASSERT(state() == InferiorRunRequested, qDebug() << state()); QTC_ASSERT(state() == InferiorRunRequested, qDebug() << state());
notifyInferiorRunOk(); notifyInferiorRunOk();
} }
} else if (newState == EngineRunFailed) {
d->m_cppEngine->quitDebugger();
} }
} }
} }

View File

@@ -179,7 +179,7 @@ QmlEngine::QmlEngine(const DebuggerStartParameters &startParameters,
connect(&d->m_outputParser, SIGNAL(noOutputMessage()), connect(&d->m_outputParser, SIGNAL(noOutputMessage()),
this, SLOT(beginConnection())); this, SLOT(beginConnection()));
connect(&d->m_outputParser, SIGNAL(errorMessage(QString)), connect(&d->m_outputParser, SIGNAL(errorMessage(QString)),
this, SLOT(wrongSetupMessageBox(QString))); this, SLOT(connectionStartupFailed(QString)));
// Only wait 8 seconds for the 'Waiting for connection' on application ouput, then just try to connect // Only wait 8 seconds for the 'Waiting for connection' on application ouput, then just try to connect
// (application output might be redirected / blocked) // (application output might be redirected / blocked)
@@ -262,7 +262,7 @@ void QmlEngine::beginConnection(quint16 port)
} }
} }
void QmlEngine::connectionStartupFailed() void QmlEngine::connectionStartupFailed(const QString &errorMessage)
{ {
if (isSlaveEngine()) { if (isSlaveEngine()) {
if (masterEngine()->state() != InferiorRunOk) { if (masterEngine()->state() != InferiorRunOk) {
@@ -275,19 +275,28 @@ void QmlEngine::connectionStartupFailed()
QMessageBox *infoBox = new QMessageBox(Core::ICore::mainWindow()); QMessageBox *infoBox = new QMessageBox(Core::ICore::mainWindow());
infoBox->setIcon(QMessageBox::Critical); infoBox->setIcon(QMessageBox::Critical);
infoBox->setWindowTitle(tr("Qt Creator")); infoBox->setWindowTitle(tr("Qt Creator"));
infoBox->setText(tr("Could not connect to the in-process QML debugger.\n" if (qobject_cast<QmlAdapter *>(sender())) {
"Do you want to retry?")); infoBox->setText(tr("Could not connect to the in-process QML debugger."
infoBox->setStandardButtons(QMessageBox::Retry | QMessageBox::Cancel | QMessageBox::Help); "\nDo you want to retry?"));
infoBox->setStandardButtons(QMessageBox::Retry | QMessageBox::Cancel |
QMessageBox::Help);
infoBox->setDefaultButton(QMessageBox::Retry); infoBox->setDefaultButton(QMessageBox::Retry);
}
if (qobject_cast<QmlJsDebugClient::QDeclarativeOutputParser *>(sender())) {
infoBox->setText(tr("Could not connect to the in-process QML debugger."
"\n%1").arg(errorMessage));
infoBox->setStandardButtons(QMessageBox::Ok | QMessageBox::Help);
infoBox->setDefaultButton(QMessageBox::Ok);
}
infoBox->setModal(true); infoBox->setModal(true);
connect(infoBox, SIGNAL(finished(int)), connect(infoBox, SIGNAL(finished(int)),
this, SLOT(retryMessageBoxFinished(int))); this, SLOT(errorMessageBoxFinished(int)));
infoBox->show(); infoBox->show();
} }
void QmlEngine::retryMessageBoxFinished(int result) void QmlEngine::errorMessageBoxFinished(int result)
{ {
switch (result) { switch (result) {
case QMessageBox::Retry: { case QMessageBox::Retry: {
@@ -310,27 +319,6 @@ void QmlEngine::retryMessageBoxFinished(int result)
} }
} }
void QmlEngine::wrongSetupMessageBox(const QString &errorMessage)
{
d->m_noDebugOutputTimer.stop();
notifyEngineRunFailed();
QMessageBox *infoBox = new QMessageBox(Core::ICore::mainWindow());
infoBox->setIcon(QMessageBox::Critical);
infoBox->setWindowTitle(tr("Qt Creator"));
//: %1 is detailed error message
infoBox->setText(tr("Could not connect to the in-process QML debugger:\n%1")
.arg(errorMessage));
infoBox->setStandardButtons(QMessageBox::Ok | QMessageBox::Help);
infoBox->setDefaultButton(QMessageBox::Ok);
infoBox->setModal(true);
connect(infoBox, SIGNAL(finished(int)),
this, SLOT(wrongSetupMessageBoxFinished(int)));
infoBox->show();
}
void QmlEngine::connectionError(QAbstractSocket::SocketError socketError) void QmlEngine::connectionError(QAbstractSocket::SocketError socketError)
{ {
if (socketError == QAbstractSocket::RemoteHostClosedError) if (socketError == QAbstractSocket::RemoteHostClosedError)
@@ -864,15 +852,6 @@ void QmlEngine::disconnected()
notifyInferiorExited(); notifyInferiorExited();
} }
void QmlEngine::wrongSetupMessageBoxFinished(int result)
{
if (result == QMessageBox::Help) {
Core::HelpManager *helpManager = Core::HelpManager::instance();
helpManager->handleHelpRequest(
QLatin1String("qthelp://com.nokia.qtcreator/doc/creator-debugging-qml.html"));
}
}
void QmlEngine::updateCurrentContext() void QmlEngine::updateCurrentContext()
{ {
const QString context = state() == InferiorStopOk ? const QString context = state() == InferiorStopOk ?

View File

@@ -94,9 +94,7 @@ public slots:
void disconnected(); void disconnected();
private slots: private slots:
void retryMessageBoxFinished(int result); void errorMessageBoxFinished(int result);
void wrongSetupMessageBox(const QString &errorMessage);
void wrongSetupMessageBoxFinished(int result);
void updateCurrentContext(); void updateCurrentContext();
void appendDebugOutput(QtMsgType type, const QString &message, void appendDebugOutput(QtMsgType type, const QString &message,
const QmlJsDebugClient::QDebugContextInfo &info); const QmlJsDebugClient::QDebugContextInfo &info);
@@ -162,7 +160,7 @@ signals:
private slots: private slots:
void beginConnection(quint16 port = 0); void beginConnection(quint16 port = 0);
void connectionEstablished(); void connectionEstablished();
void connectionStartupFailed(); void connectionStartupFailed(const QString &errorMessage = QString());
void connectionError(QAbstractSocket::SocketError error); void connectionError(QAbstractSocket::SocketError error);
void serviceConnectionError(const QString &service); void serviceConnectionError(const QString &service);
void appendMessage(const QString &msg, Utils::OutputFormat); void appendMessage(const QString &msg, Utils::OutputFormat);