diff --git a/src/plugins/debugger/gdb/abstractgdbadapter.cpp b/src/plugins/debugger/gdb/abstractgdbadapter.cpp new file mode 100644 index 0000000000000000000000000000000000000000..3acb9db1e11dbe98b777bd386af48f48a53f74d3 --- /dev/null +++ b/src/plugins/debugger/gdb/abstractgdbadapter.cpp @@ -0,0 +1,87 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#include "abstractgdbadapter.h" + +#include <utils/qtcassert.h> + +#include <QtCore/QObject> +#include <QtCore/QProcess> + +namespace Debugger { +namespace Internal { + +AbstractGdbAdapter::AbstractGdbAdapter(GdbEngine *engine, QObject *parent) + : QObject(parent), m_engine(engine) +{ +} + +AbstractGdbAdapter::~AbstractGdbAdapter() +{ + disconnect(); +} + +// This cannot be in the c'tor, as it would not connect the "virtual" slots +void AbstractGdbAdapter::commonInit() +{ + QTC_ASSERT(state() == DebuggerNotReady, qDebug() << state()); + connect(&m_gdbProc, SIGNAL(error(QProcess::ProcessError)), + this, SLOT(handleGdbError(QProcess::ProcessError))); + connect(&m_gdbProc, SIGNAL(started()), + this, SLOT(handleGdbStarted())); + connect(&m_gdbProc, SIGNAL(finished(int, QProcess::ExitStatus)), + this, SLOT(handleGdbFinished(int, QProcess::ExitStatus))); + connect(&m_gdbProc, SIGNAL(readyReadStandardOutput()), + this, SIGNAL(readyReadStandardOutput())); + connect(&m_gdbProc, SIGNAL(readyReadStandardError()), + this, SIGNAL(readyReadStandardError())); +} + +QByteArray AbstractGdbAdapter::readAllStandardOutput() +{ + return m_gdbProc.readAllStandardOutput(); +} + +QByteArray AbstractGdbAdapter::readAllStandardError() +{ + return m_gdbProc.readAllStandardError(); +} + +void AbstractGdbAdapter::write(const QByteArray &data) +{ + m_gdbProc.write(data); +} + +bool AbstractGdbAdapter::isTrkAdapter() const +{ + return false; +} + +} // namespace Internal +} // namespace Debugger diff --git a/src/plugins/debugger/gdb/abstractgdbadapter.h b/src/plugins/debugger/gdb/abstractgdbadapter.h index b107477b6c0b2e061b27fcf8d1f04d2d7559c34d..cafc03d491dee4234973146bbcd23c96d834b668 100644 --- a/src/plugins/debugger/gdb/abstractgdbadapter.h +++ b/src/plugins/debugger/gdb/abstractgdbadapter.h @@ -48,15 +48,13 @@ class AbstractGdbAdapter : public QObject Q_OBJECT public: - AbstractGdbAdapter(GdbEngine *engine, QObject *parent = 0) - : QObject(parent), m_engine(engine) - {} - virtual ~AbstractGdbAdapter() { disconnect(); } + AbstractGdbAdapter(GdbEngine *engine, QObject *parent = 0); + virtual ~AbstractGdbAdapter(); - virtual QByteArray readAllStandardError() = 0; - virtual QByteArray readAllStandardOutput() = 0; - virtual void write(const QByteArray &data) = 0; - virtual bool isTrkAdapter() const = 0; + QByteArray readAllStandardOutput(); + QByteArray readAllStandardError(); + virtual void write(const QByteArray &data); + virtual bool isTrkAdapter() const; // isUtterlyBrokenAdapter virtual void startAdapter() = 0; virtual void prepareInferior() = 0; @@ -83,6 +81,7 @@ signals: void readyReadStandardError(); protected: + void commonInit(); DebuggerState state() const { return m_engine->state(); } void setState(DebuggerState state) @@ -95,6 +94,8 @@ protected: { m_engine->showStatusMessage(msg); } GdbEngine * const m_engine; + + QProcess m_gdbProc; }; } // namespace Internal diff --git a/src/plugins/debugger/gdb/attachgdbadapter.cpp b/src/plugins/debugger/gdb/attachgdbadapter.cpp index 2e07e1a7b3780ec941667c107cd3f9d58e751b1f..a43947129b7a9cbe88f14fb6e3ab43ee2691f1f1 100644 --- a/src/plugins/debugger/gdb/attachgdbadapter.cpp +++ b/src/plugins/debugger/gdb/attachgdbadapter.cpp @@ -53,17 +53,7 @@ namespace Internal { AttachGdbAdapter::AttachGdbAdapter(GdbEngine *engine, QObject *parent) : AbstractGdbAdapter(engine, parent) { - QTC_ASSERT(state() == DebuggerNotReady, qDebug() << state()); - connect(&m_gdbProc, SIGNAL(error(QProcess::ProcessError)), - this, SLOT(handleGdbError(QProcess::ProcessError))); - connect(&m_gdbProc, SIGNAL(readyReadStandardOutput()), - this, SIGNAL(readyReadStandardOutput())); - connect(&m_gdbProc, SIGNAL(readyReadStandardError()), - this, SIGNAL(readyReadStandardError())); - connect(&m_gdbProc, SIGNAL(started()), - this, SLOT(handleGdbStarted())); - connect(&m_gdbProc, SIGNAL(finished(int, QProcess::ExitStatus)), - this, SLOT(handleGdbFinished(int, QProcess::ExitStatus))); + commonInit(); } void AttachGdbAdapter::startAdapter() diff --git a/src/plugins/debugger/gdb/attachgdbadapter.h b/src/plugins/debugger/gdb/attachgdbadapter.h index c3a30a7705ab105c8cc045df1ea6506397a7512d..8495497105bc5627d709a5c29b28dd3228968185 100644 --- a/src/plugins/debugger/gdb/attachgdbadapter.h +++ b/src/plugins/debugger/gdb/attachgdbadapter.h @@ -52,11 +52,6 @@ class AttachGdbAdapter : public AbstractGdbAdapter public: AttachGdbAdapter(GdbEngine *engine, QObject *parent = 0); -private: - QByteArray readAllStandardError() { return m_gdbProc.readAllStandardError(); } - QByteArray readAllStandardOutput() { return m_gdbProc.readAllStandardOutput(); } - void write(const QByteArray &data) { m_gdbProc.write(data, data.size()); } - bool isTrkAdapter() const { return false; } bool dumpersAvailable() const { return false; } void startAdapter(); @@ -65,6 +60,7 @@ private: void interruptInferior(); void shutdown(); +private: void handleAttach(const GdbResponse &response); void handleDetach(const GdbResponse &response); void handleExit(const GdbResponse &response); @@ -72,8 +68,6 @@ private: Q_SLOT void handleGdbStarted(); Q_SLOT void handleGdbFinished(int, QProcess::ExitStatus); Q_SLOT void handleGdbError(QProcess::ProcessError error); - - QProcess m_gdbProc; }; } // namespace Internal diff --git a/src/plugins/debugger/gdb/coregdbadapter.cpp b/src/plugins/debugger/gdb/coregdbadapter.cpp index 90747c1b54415009ec35528614453a29fc5b1bb1..d51963606e3be7cf1a00861584a221241978bf89 100644 --- a/src/plugins/debugger/gdb/coregdbadapter.cpp +++ b/src/plugins/debugger/gdb/coregdbadapter.cpp @@ -53,17 +53,7 @@ namespace Internal { CoreGdbAdapter::CoreGdbAdapter(GdbEngine *engine, QObject *parent) : AbstractGdbAdapter(engine, parent) { - QTC_ASSERT(state() == DebuggerNotReady, qDebug() << state()); - connect(&m_gdbProc, SIGNAL(error(QProcess::ProcessError)), - this, SLOT(handleGdbError(QProcess::ProcessError))); - connect(&m_gdbProc, SIGNAL(readyReadStandardOutput()), - this, SIGNAL(readyReadStandardOutput())); - connect(&m_gdbProc, SIGNAL(readyReadStandardError()), - this, SIGNAL(readyReadStandardError())); - connect(&m_gdbProc, SIGNAL(started()), - this, SLOT(handleGdbStarted())); - connect(&m_gdbProc, SIGNAL(finished(int, QProcess::ExitStatus)), - this, SLOT(handleGdbFinished(int, QProcess::ExitStatus))); + commonInit(); } void CoreGdbAdapter::startAdapter() diff --git a/src/plugins/debugger/gdb/coregdbadapter.h b/src/plugins/debugger/gdb/coregdbadapter.h index 52bcf7a42842959dc6d594084d983f1e90c8c217..b097f315464e194faf855caaa7ab8db756422f15 100644 --- a/src/plugins/debugger/gdb/coregdbadapter.h +++ b/src/plugins/debugger/gdb/coregdbadapter.h @@ -52,11 +52,6 @@ class CoreGdbAdapter : public AbstractGdbAdapter public: CoreGdbAdapter(GdbEngine *engine, QObject *parent = 0); -private: - QByteArray readAllStandardError() { return m_gdbProc.readAllStandardError(); } - QByteArray readAllStandardOutput() { return m_gdbProc.readAllStandardOutput(); } - void write(const QByteArray &data) { m_gdbProc.write(data, data.size()); } - bool isTrkAdapter() const { return false; } bool dumpersAvailable() const { return false; } void startAdapter(); @@ -65,6 +60,7 @@ private: void interruptInferior(); void shutdown(); +private: void handleTargetCore1(const GdbResponse &response); void handleDetach1(const GdbResponse &response); void handleFileExecAndSymbols(const GdbResponse &response); @@ -75,7 +71,6 @@ private: Q_SLOT void handleGdbError(QProcess::ProcessError error); Q_SLOT void handleGdbFinished(int, QProcess::ExitStatus); - QProcess m_gdbProc; QString m_executable; }; diff --git a/src/plugins/debugger/gdb/gdb.pri b/src/plugins/debugger/gdb/gdb.pri index 5dc9fc83734e1a201b5d247d6e5aa0b69d006e4a..ddd47c88b13e120e395683b0f632e02266f105a8 100644 --- a/src/plugins/debugger/gdb/gdb.pri +++ b/src/plugins/debugger/gdb/gdb.pri @@ -26,6 +26,7 @@ SOURCES += \ $$PWD/trkoptions.cpp \ $$PWD/trkoptionswidget.cpp \ $$PWD/trkoptionspage.cpp \ + $$PWD/abstractgdbadapter.cpp \ $$PWD/attachgdbadapter.cpp \ $$PWD/coregdbadapter.cpp \ $$PWD/plaingdbadapter.cpp \ diff --git a/src/plugins/debugger/gdb/plaingdbadapter.cpp b/src/plugins/debugger/gdb/plaingdbadapter.cpp index f0210e9d63cfe449fc5a9358610bfaf69ce9ca4c..00aed0f9588b7cffdc461612ce065c1681043b46 100644 --- a/src/plugins/debugger/gdb/plaingdbadapter.cpp +++ b/src/plugins/debugger/gdb/plaingdbadapter.cpp @@ -58,17 +58,7 @@ namespace Internal { PlainGdbAdapter::PlainGdbAdapter(GdbEngine *engine, QObject *parent) : AbstractGdbAdapter(engine, parent) { - QTC_ASSERT(state() == DebuggerNotReady, qDebug() << state()); - connect(&m_gdbProc, SIGNAL(error(QProcess::ProcessError)), - this, SLOT(handleGdbError(QProcess::ProcessError))); - connect(&m_gdbProc, SIGNAL(readyReadStandardOutput()), - this, SIGNAL(readyReadStandardOutput())); - connect(&m_gdbProc, SIGNAL(readyReadStandardError()), - this, SIGNAL(readyReadStandardError())); - connect(&m_gdbProc, SIGNAL(started()), - this, SLOT(handleGdbStarted())); - connect(&m_gdbProc, SIGNAL(finished(int, QProcess::ExitStatus)), - this, SLOT(handleGdbFinished(int, QProcess::ExitStatus))); + commonInit(); m_stubProc.setMode(Utils::ConsoleProcess::Debug); #ifdef Q_OS_UNIX diff --git a/src/plugins/debugger/gdb/plaingdbadapter.h b/src/plugins/debugger/gdb/plaingdbadapter.h index 9f2c4f0120a8f69d13f54fd8d2791965a374bf51..6a69f4d66d38c0faf4c1b7a867fb2a962c6485d3 100644 --- a/src/plugins/debugger/gdb/plaingdbadapter.h +++ b/src/plugins/debugger/gdb/plaingdbadapter.h @@ -55,10 +55,6 @@ class PlainGdbAdapter : public AbstractGdbAdapter public: PlainGdbAdapter(GdbEngine *engine, QObject *parent = 0); - QByteArray readAllStandardError() { return m_gdbProc.readAllStandardError(); } - QByteArray readAllStandardOutput() { return m_gdbProc.readAllStandardOutput(); } - void write(const QByteArray &data) { m_gdbProc.write(data, data.size()); } - bool isTrkAdapter() const { return false; } bool dumpersAvailable() const { return true; } void startAdapter(); @@ -81,7 +77,6 @@ private: Q_SLOT void stubStarted(); Q_SLOT void stubError(const QString &msg); - QProcess m_gdbProc; Utils::ConsoleProcess m_stubProc; OutputCollector m_outputCollector; }; diff --git a/src/plugins/debugger/gdb/remotegdbadapter.cpp b/src/plugins/debugger/gdb/remotegdbadapter.cpp index 422eed5954ec55985196cefe0e8c1d51d93b95f1..71ee7852b279c93b08b2881766ecdde816d39807 100644 --- a/src/plugins/debugger/gdb/remotegdbadapter.cpp +++ b/src/plugins/debugger/gdb/remotegdbadapter.cpp @@ -54,17 +54,7 @@ namespace Internal { RemoteGdbAdapter::RemoteGdbAdapter(GdbEngine *engine, QObject *parent) : AbstractGdbAdapter(engine, parent) { - QTC_ASSERT(state() == DebuggerNotReady, qDebug() << state()); - connect(&m_gdbProc, SIGNAL(error(QProcess::ProcessError)), - this, SLOT(handleGdbError(QProcess::ProcessError))); - connect(&m_gdbProc, SIGNAL(readyReadStandardOutput()), - this, SIGNAL(readyReadStandardOutput())); - connect(&m_gdbProc, SIGNAL(readyReadStandardError()), - this, SIGNAL(readyReadStandardError())); - connect(&m_gdbProc, SIGNAL(started()), - this, SLOT(handleGdbStarted())); - connect(&m_gdbProc, SIGNAL(finished(int, QProcess::ExitStatus)), - this, SLOT(handleGdbFinished(int, QProcess::ExitStatus))); + commonInit(); connect(&m_uploadProc, SIGNAL(error(QProcess::ProcessError)), this, SLOT(uploadProcError(QProcess::ProcessError))); diff --git a/src/plugins/debugger/gdb/remotegdbadapter.h b/src/plugins/debugger/gdb/remotegdbadapter.h index d45e27fda601e687f08579936a57dc4e9c36107a..a0ca3aac4cb8c0fcaf7b20c3261639a1dc2b1aec 100644 --- a/src/plugins/debugger/gdb/remotegdbadapter.h +++ b/src/plugins/debugger/gdb/remotegdbadapter.h @@ -52,11 +52,6 @@ class RemoteGdbAdapter : public AbstractGdbAdapter public: RemoteGdbAdapter(GdbEngine *engine, QObject *parent = 0); -private: - QByteArray readAllStandardError() { return m_gdbProc.readAllStandardError(); } - QByteArray readAllStandardOutput() { return m_gdbProc.readAllStandardOutput(); } - void write(const QByteArray &data) { m_gdbProc.write(data, data.size()); } - bool isTrkAdapter() const { return false; } bool dumpersAvailable() const { return true; } void startAdapter(); @@ -65,6 +60,7 @@ private: void interruptInferior(); void shutdown(); +private: Q_SLOT void readUploadStandardOutput(); Q_SLOT void readUploadStandardError(); Q_SLOT void uploadProcError(QProcess::ProcessError error); @@ -79,7 +75,6 @@ private: Q_SLOT void handleGdbError(QProcess::ProcessError error); Q_SLOT void handleGdbFinished(int, QProcess::ExitStatus); - QProcess m_gdbProc; QProcess m_uploadProc; }; diff --git a/src/plugins/debugger/gdb/trkgdbadapter.cpp b/src/plugins/debugger/gdb/trkgdbadapter.cpp index 9ab1047713d29ef3c671ab162c21480a8a05fadb..f12697546b3a4620725cb4298de3729714ecec73 100644 --- a/src/plugins/debugger/gdb/trkgdbadapter.cpp +++ b/src/plugins/debugger/gdb/trkgdbadapter.cpp @@ -203,16 +203,8 @@ TrkGdbAdapter::TrkGdbAdapter(GdbEngine *engine, const TrkOptionsPtr &options) : const uid_t portOffset = getuid(); #endif m_gdbServerName = _("127.0.0.1:%1").arg(2222 + portOffset); - connect(&m_gdbProc, SIGNAL(readyReadStandardError()), - this, SIGNAL(readyReadStandardError())); - connect(&m_gdbProc, SIGNAL(readyReadStandardOutput()), - this, SIGNAL(readyReadStandardOutput())); - connect(&m_gdbProc, SIGNAL(error(QProcess::ProcessError)), - this, SLOT(handleGdbError(QProcess::ProcessError))); - connect(&m_gdbProc, SIGNAL(finished(int, QProcess::ExitStatus)), - this, SLOT(handleGdbFinished(int, QProcess::ExitStatus))); - connect(&m_gdbProc, SIGNAL(started()), - this, SLOT(handleGdbStarted())); + + commonInit(); connect(&m_gdbProc, SIGNAL(stateChanged(QProcess::ProcessState)), this, SLOT(handleGdbStateChanged(QProcess::ProcessState))); @@ -1830,16 +1822,6 @@ void TrkGdbAdapter::handleRfcommStateChanged(QProcess::ProcessState newState) // AbstractGdbAdapter interface implementation // -QByteArray TrkGdbAdapter::readAllStandardError() -{ - return m_gdbProc.readAllStandardError(); -} - -QByteArray TrkGdbAdapter::readAllStandardOutput() -{ - return m_gdbProc.readAllStandardOutput(); -} - void TrkGdbAdapter::write(const QByteArray &data) { // Write magic packets directly to TRK. @@ -1870,7 +1852,7 @@ void TrkGdbAdapter::write(const QByteArray &data) trkReadMemoryMessage(m_session.dataseg, 12)); return; } - m_gdbProc.write(data, data.size()); + m_gdbProc.write(data); } uint oldPC; diff --git a/src/plugins/debugger/gdb/trkgdbadapter.h b/src/plugins/debugger/gdb/trkgdbadapter.h index bcde7c3e555cfc321a83a6863d360dac363e616a..030d61215a2333773dffeabb9ba7be7d5e9d0721 100644 --- a/src/plugins/debugger/gdb/trkgdbadapter.h +++ b/src/plugins/debugger/gdb/trkgdbadapter.h @@ -155,7 +155,6 @@ private: QString m_gdbServerName; // 127.0.0.1:(2222+uid) - QProcess m_gdbProc; QProcess m_rfcommProc; bool m_running;