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 +
utils/pathchooser.h
+
+