diff --git a/src/plugins/debugger/debuggerdialogs.cpp b/src/plugins/debugger/debuggerdialogs.cpp
index f30ee2c4172..44105961845 100644
--- a/src/plugins/debugger/debuggerdialogs.cpp
+++ b/src/plugins/debugger/debuggerdialogs.cpp
@@ -300,6 +300,58 @@ void AttachExternalDialog::pidChanged(const QString &pid)
}
+///////////////////////////////////////////////////////////////////////
+//
+// StartExternalDialog
+//
+///////////////////////////////////////////////////////////////////////
+
+
+StartExternalDialog::StartExternalDialog(QWidget *parent)
+ : QDialog(parent), m_ui(new Ui::StartExternalDialog)
+{
+ m_ui->setupUi(this);
+ m_ui->execFile->setExpectedKind(Core::Utils::PathChooser::File);
+ m_ui->execFile->setPromptDialogTitle(tr("Select Executable"));
+ m_ui->buttonBox->button(QDialogButtonBox::Ok)->setDefault(true);
+
+ //execLabel->setHidden(false);
+ //execEdit->setHidden(false);
+ //browseButton->setHidden(false);
+
+ m_ui->execLabel->setText(tr("Executable:"));
+ m_ui->argLabel->setText(tr("Arguments:"));
+
+ connect(m_ui->buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
+ connect(m_ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
+}
+
+StartExternalDialog::~StartExternalDialog()
+{
+ delete m_ui;
+}
+
+void StartExternalDialog::setExecutableFile(const QString &str)
+{
+ m_ui->execFile->setPath(str);
+}
+
+QString StartExternalDialog::executableFile() const
+{
+ return m_ui->execFile->path();
+}
+
+void StartExternalDialog::setExecutableArguments(const QString &str)
+{
+ m_ui->argsEdit->setText(str);
+}
+
+QString StartExternalDialog::executableArguments() const
+{
+ return m_ui->argsEdit->text();
+}
+
+
///////////////////////////////////////////////////////////////////////
//
// StartRemoteDialog
@@ -314,9 +366,14 @@ StartRemoteDialog::StartRemoteDialog(QWidget *parent)
m_ui->buttonBox->button(QDialogButtonBox::Ok)->setDefault(true);
m_ui->serverStartScript->setExpectedKind(Core::Utils::PathChooser::File);
m_ui->serverStartScript->setPromptDialogTitle(tr("Select Executable"));
+
+ connect(m_ui->useServerStartScriptCheckBox, SIGNAL(toggled(bool)),
+ this, SLOT(updateState()));
connect(m_ui->buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
connect(m_ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
+
+ updateState();
}
StartRemoteDialog::~StartRemoteDialog()
@@ -366,55 +423,21 @@ QString StartRemoteDialog::serverStartScript() const
return m_ui->serverStartScript->path();
}
-///////////////////////////////////////////////////////////////////////
-//
-// StartExternalDialog
-//
-///////////////////////////////////////////////////////////////////////
-
-
-StartExternalDialog::StartExternalDialog(QWidget *parent)
- : QDialog(parent), m_ui(new Ui::StartExternalDialog)
+void StartRemoteDialog::setUseServerStartScript(bool on)
{
- m_ui->setupUi(this);
- m_ui->execFile->setExpectedKind(Core::Utils::PathChooser::File);
- m_ui->execFile->setPromptDialogTitle(tr("Select Executable"));
- m_ui->buttonBox->button(QDialogButtonBox::Ok)->setDefault(true);
-
- //execLabel->setHidden(false);
- //execEdit->setHidden(false);
- //browseButton->setHidden(false);
-
- m_ui->execLabel->setText(tr("Executable:"));
- m_ui->argLabel->setText(tr("Arguments:"));
-
- connect(m_ui->buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
- connect(m_ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
+ m_ui->useServerStartScriptCheckBox->setChecked(on);
}
-StartExternalDialog::~StartExternalDialog()
+bool StartRemoteDialog::useServerStartScript() const
{
- delete m_ui;
+ return m_ui->useServerStartScriptCheckBox->isChecked();
}
-void StartExternalDialog::setExecutableFile(const QString &str)
+void StartRemoteDialog::updateState()
{
- m_ui->execFile->setPath(str);
-}
-
-void StartExternalDialog::setExecutableArguments(const QString &str)
-{
- m_ui->argsEdit->setText(str);
-}
-
-QString StartExternalDialog::executableFile() const
-{
- return m_ui->execFile->path();
-}
-
-QString StartExternalDialog::executableArguments() const
-{
- return m_ui->argsEdit->text();
+ bool enabled = m_ui->useServerStartScriptCheckBox->isChecked();
+ m_ui->serverStartScriptLabel->setEnabled(enabled);
+ m_ui->serverStartScript->setEnabled(enabled);
}
} // namespace Internal
diff --git a/src/plugins/debugger/debuggerdialogs.h b/src/plugins/debugger/debuggerdialogs.h
index 403e094d4cc..3f6deba9442 100644
--- a/src/plugins/debugger/debuggerdialogs.h
+++ b/src/plugins/debugger/debuggerdialogs.h
@@ -101,26 +101,6 @@ private:
ProcessListFilterModel *m_model;
};
-class StartRemoteDialog : public QDialog
-{
- Q_OBJECT
-
-public:
- explicit StartRemoteDialog(QWidget *parent);
- ~StartRemoteDialog();
-
- void setRemoteChannel(const QString &host);
- void setRemoteArchitecture(const QString &arch);
- void setRemoteArchitectures(const QStringList &arches);
- QString remoteChannel() const;
- QString remoteArchitecture() const;
- void setServerStartScript(const QString &scriptName);
- QString serverStartScript() const;
-
-private:
- Ui::StartRemoteDialog *m_ui;
-};
-
class StartExternalDialog : public QDialog
{
Q_OBJECT
@@ -139,6 +119,31 @@ private:
Ui::StartExternalDialog *m_ui;
};
+class StartRemoteDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit StartRemoteDialog(QWidget *parent);
+ ~StartRemoteDialog();
+
+ void setRemoteChannel(const QString &host);
+ void setRemoteArchitecture(const QString &arch);
+ void setRemoteArchitectures(const QStringList &arches);
+ QString remoteChannel() const;
+ QString remoteArchitecture() const;
+ void setServerStartScript(const QString &scriptName);
+ QString serverStartScript() const;
+ void setUseServerStartScript(bool on);
+ bool useServerStartScript() const;
+
+private slots:
+ void updateState();
+
+private:
+ Ui::StartRemoteDialog *m_ui;
+};
+
} // namespace Debugger
} // namespace Internal
diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp
index cbcd0f76f3e..2d1e5e18325 100644
--- a/src/plugins/debugger/debuggermanager.cpp
+++ b/src/plugins/debugger/debuggermanager.cpp
@@ -937,6 +937,7 @@ void DebuggerManager::startNewDebugger(DebuggerRunControl *runControl)
dlg.setRemoteChannel(configValue(_("LastRemoteChannel")).toString());
dlg.setRemoteArchitecture(configValue(_("LastRemoteArchtecture")).toString());
dlg.setServerStartScript(configValue(_("LastServerStartScript")).toString());
+ dlg.setUseServerStartScript(configValue(_("LastUseServerStartScript")).toBool());
if (dlg.exec() != QDialog::Accepted) {
runControl->debuggingFinished();
return;
@@ -944,9 +945,12 @@ void DebuggerManager::startNewDebugger(DebuggerRunControl *runControl)
setConfigValue(_("LastRemoteChannel"), dlg.remoteChannel());
setConfigValue(_("LastRemoteArchitecture"), dlg.remoteArchitecture());
setConfigValue(_("LastServerStartScript"), dlg.serverStartScript());
+ setConfigValue(_("LastUseServerStartScript"), dlg.useServerStartScript());
m_remoteChannel = dlg.remoteChannel();
m_remoteArchitecture = dlg.remoteArchitecture();
m_serverStartScript = dlg.serverStartScript();
+ if (!dlg.useServerStartScript())
+ m_serverStartScript.clear();
break;
}
}
diff --git a/src/plugins/debugger/gdbengine.cpp b/src/plugins/debugger/gdbengine.cpp
index e2239c878e0..928f7428c59 100644
--- a/src/plugins/debugger/gdbengine.cpp
+++ b/src/plugins/debugger/gdbengine.cpp
@@ -1558,7 +1558,7 @@ bool GdbEngine::startDebugger()
QString fileName = q->m_executable;
execCommand(_("-file-exec-and-symbols \"%1\"").arg(fileName));
// works only for > 6.8
- execCommand(_("set target-async on"), CB(handleTargetAsync));
+ execCommand(_("set target-async on"), CB(handleSetTargetAsync));
} else if (q->m_useTerminal) {
qq->breakHandler()->setAllPending();
} else if (q->startMode() == StartInternal || q->startMode() == StartExternal) {
@@ -1653,15 +1653,13 @@ void GdbEngine::handleAttach(const GdbResultRecord &, const QVariant &)
qq->reloadRegisters();
}
-void GdbEngine::handleTargetAsync(const GdbResultRecord &record, const QVariant &)
+void GdbEngine::handleSetTargetAsync(const GdbResultRecord &record, const QVariant &)
{
if (record.resultClass == GdbResultDone) {
//execCommand(_("info target"), handleStart);
qq->notifyInferiorRunningRequested();
execCommand(_("target remote %1").arg(q->m_remoteChannel),
- CB(handleAttach));
- //execCommand(_("-exec-continue"), CB(handleExecRun));
- handleAqcuiredInferior();
+ CB(handleTargetRemote));
} else if (record.resultClass == GdbResultError) {
// a typical response on "old" gdb is:
// &"set target-async on\n"
@@ -1671,6 +1669,22 @@ void GdbEngine::handleTargetAsync(const GdbResultRecord &record, const QVariant
execCommand(_("-gdb-exit"), CB(handleExit));
}
}
+
+void GdbEngine::handleTargetRemote(const GdbResultRecord &record, const QVariant &)
+{
+ if (record.resultClass == GdbResultDone) {
+ //execCommand(_("-exec-continue"), CB(handleExecRun));
+ handleAqcuiredInferior();
+ } else if (record.resultClass == GdbResultError) {
+ // 16^error,msg="hd:5555: Connection timed out."
+ QString msg = __(record.data.findChild("msg").data());
+ QString msg1 = tr("Connecting to remote server failed:");
+ q->showStatusMessage(msg1 + _c(' ') + msg);
+ QMessageBox::critical(q->mainWindow(), tr("Error"), msg1 + _c('\n') + msg);
+ execCommand(_("-gdb-exit"), CB(handleExit));
+ }
+}
+
void GdbEngine::handleExit(const GdbResultRecord &, const QVariant &)
{
q->showStatusMessage(tr("Debugger exited."));
diff --git a/src/plugins/debugger/gdbengine.h b/src/plugins/debugger/gdbengine.h
index d749e75190a..e309f1b1a04 100644
--- a/src/plugins/debugger/gdbengine.h
+++ b/src/plugins/debugger/gdbengine.h
@@ -218,7 +218,8 @@ private:
void handleQuerySources(const GdbResultRecord &response, const QVariant &);
void handleTargetCore(const GdbResultRecord &, const QVariant &);
void handleExit(const GdbResultRecord &, const QVariant &);
- void handleTargetAsync(const GdbResultRecord &, const QVariant &);
+ void handleSetTargetAsync(const GdbResultRecord &, const QVariant &);
+ void handleTargetRemote(const GdbResultRecord &, const QVariant &);
void debugMessage(const QString &msg);
OutputCollector m_outputCollector;
diff --git a/src/plugins/debugger/startremotedialog.ui b/src/plugins/debugger/startremotedialog.ui
index af0bc703237..da017b20576 100644
--- a/src/plugins/debugger/startremotedialog.ui
+++ b/src/plugins/debugger/startremotedialog.ui
@@ -28,7 +28,7 @@
-
- Host and Port:
+ Host and port:
@@ -49,15 +49,25 @@
-
+ -
+
+
-
-
+
- Server start script
+ Use server start script:
- -
-
+
-
+
+
+ -
+
+
+ Server start script:
+
+
@@ -73,6 +83,13 @@
+
+
+ Core::Utils::PathChooser
+ QWidget
+
+
+