OSDN Git Service

Debugging/gdb: Fix RemotePlainGdbAdapter.
authorChristian Kandeler <christian.kandeler@nokia.com>
Fri, 8 Oct 2010 16:32:13 +0000 (18:32 +0200)
committerChristian Kandeler <christian.kandeler@nokia.com>
Fri, 8 Oct 2010 16:33:36 +0000 (18:33 +0200)
Reviewed-by: hjk
src/plugins/debugger/gdb/remotegdbprocess.cpp
src/plugins/debugger/gdb/remotegdbprocess.h
src/plugins/debugger/gdb/remoteplaingdbadapter.cpp
src/plugins/debugger/gdb/remoteplaingdbadapter.h

index 7288f44..0b84a5b 100644 (file)
@@ -31,6 +31,8 @@
 
 #include "remoteplaingdbadapter.h"
 
+#include <utils/qtcassert.h>
+
 #include <ctype.h>
 
 using namespace Core;
@@ -60,13 +62,20 @@ QByteArray RemoteGdbProcess::readAllStandardError()
 
 void RemoteGdbProcess::start(const QString &cmd, const QStringList &args)
 {
+    Q_UNUSED(cmd);
+    Q_UNUSED(args);
+    QTC_ASSERT(m_gdbStarted, return);
+}
+
+void RemoteGdbProcess::realStart(const QString &cmd, const QStringList &args)
+{
     m_command = cmd;
     m_cmdArgs = args;
     m_gdbStarted = false;
     m_error.clear();
     m_conn = SshConnection::create();
     connect(m_conn.data(), SIGNAL(connected()), this, SLOT(handleConnected()));
-    connect(m_conn.data(), SIGNAL(error(SshError)), this,
+    connect(m_conn.data(), SIGNAL(error(Core::SshError)), this,
         SLOT(handleConnectionError()));
     m_conn->connectToHost(m_connParams);
 }
@@ -129,13 +138,15 @@ void RemoteGdbProcess::handleAppOutputReaderFinished(int exitStatus)
 void RemoteGdbProcess::handleGdbStarted()
 {
     m_gdbStarted = true;
+    emit started();
 }
 
 void RemoteGdbProcess::handleGdbFinished(int exitStatus)
 {
     switch (exitStatus) {
     case SshRemoteProcess::FailedToStart:
-        emitErrorExit(tr("Remote gdb failed to start."));
+        m_error = tr("Remote gdb failed to start.");
+        emit startFailed();
         break;
     case SshRemoteProcess::KilledBySignal:
         emitErrorExit(tr("Remote gdb crashed."));
index 9a9679b..e47a4a2 100644 (file)
@@ -67,9 +67,14 @@ public:
     virtual void setWorkingDirectory(const QString &dir);
 
     void interruptInferior();
+    void realStart(const QString &cmd, const QStringList &args);
 
     static const QByteArray CtrlC;
 
+signals:
+    void started();
+    void startFailed();
+
 private slots:
     void handleConnected();
     void handleConnectionError();
index 2d06ff3..9ade026 100644 (file)
@@ -41,6 +41,9 @@ RemotePlainGdbAdapter::RemotePlainGdbAdapter(GdbEngine *engine, QObject *parent)
     : AbstractPlainGdbAdapter(engine, parent),
       m_gdbProc(engine->startParameters().connParams, this)
 {
+    connect(&m_gdbProc, SIGNAL(started()), this, SLOT(handleGdbStarted()));
+    connect(&m_gdbProc, SIGNAL(startFailed()), this,
+        SLOT(handleGdbStartFailed()));
 }
 
 void RemotePlainGdbAdapter::startAdapter()
@@ -106,11 +109,22 @@ void RemotePlainGdbAdapter::handleSetupDone()
         m_gdbProc.setWorkingDirectory(startParameters().workingDirectory);
     if (!startParameters().environment.isEmpty())
         m_gdbProc.setEnvironment(startParameters().environment);
+    m_gdbProc.realStart(m_engine->startParameters().debuggerCommand,
+        QStringList() << QLatin1String("-i") << QLatin1String("mi"));
+}
 
-    if (m_engine->startGdb(QStringList(), m_engine->startParameters().debuggerCommand))
+void RemotePlainGdbAdapter::handleGdbStarted()
+{
+    if (m_engine->startGdb(QStringList(),
+            m_engine->startParameters().debuggerCommand))
         m_engine->handleAdapterStarted();
 }
 
+void RemotePlainGdbAdapter::handleGdbStartFailed()
+{
+    m_engine->handleAdapterStartFailed(m_gdbProc.errorString());
+}
+
 void RemotePlainGdbAdapter::handleSetupFailed(const QString &reason)
 {
     QTC_ASSERT(state() == EngineSetupRequested, qDebug() << state());
index 68a2651..6275e8a 100644 (file)
@@ -49,6 +49,10 @@ public:
 signals:
     void requestSetup();
 
+private slots:
+    void handleGdbStarted();
+    void handleGdbStartFailed();
+
 private:
     void startAdapter();
     void setupInferior();