forked from qt-creator/qt-creator
debugger: refactoring
rename GdbProcessBase into AbstractGdbAdapter rename SymbianAdapter into TrkGdbAdapter rename GdbProcess into PlainGdbAdapter
This commit is contained in:
@@ -27,8 +27,8 @@
|
|||||||
**
|
**
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
#ifndef DEBUGGER_PROCESSBASE_H
|
#ifndef DEBUGGER_ABSTRACT_GDB_ADAPTER
|
||||||
#define DEBUGGER_PROCESSBASE_H
|
#define DEBUGGER_ABSTRACT_GDB_ADAPTER
|
||||||
|
|
||||||
#include <QtCore/QObject>
|
#include <QtCore/QObject>
|
||||||
#include <QtCore/QProcess>
|
#include <QtCore/QProcess>
|
||||||
@@ -38,16 +38,17 @@ namespace Internal {
|
|||||||
|
|
||||||
class GdbEngine;
|
class GdbEngine;
|
||||||
|
|
||||||
// GdbProcessBase is inherited by GdbProcess and the gdb/trk Adapter.
|
// AbstractGdbAdapter is inherited by PlainGdbAdapter used for local
|
||||||
// In the GdbProcess case it's just a wrapper around a QProcess running
|
// debugging and TrkGdbAdapter used for on-device debugging.
|
||||||
// gdb, in the Adapter case it's the interface to the gdb process in
|
// In the PlainGdbAdapter case it's just a wrapper around a QProcess running
|
||||||
|
// gdb, in the TrkGdbAdapter case it's the interface to the gdb process in
|
||||||
// the whole rfomm/gdb/gdbserver combo.
|
// the whole rfomm/gdb/gdbserver combo.
|
||||||
class GdbProcessBase : public QObject
|
class AbstractGdbAdapter : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GdbProcessBase(QObject *parent = 0) : QObject(parent) {}
|
AbstractGdbAdapter(QObject *parent = 0) : QObject(parent) {}
|
||||||
|
|
||||||
virtual void start(const QString &program, const QStringList &args,
|
virtual void start(const QString &program, const QStringList &args,
|
||||||
QIODevice::OpenMode mode = QIODevice::ReadWrite) = 0;
|
QIODevice::OpenMode mode = QIODevice::ReadWrite) = 0;
|
||||||
@@ -77,4 +78,4 @@ signals:
|
|||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
} // namespace Debugger
|
} // namespace Debugger
|
||||||
|
|
||||||
#endif // DEBUGGER_PROCESSBASE_H
|
#endif // DEBUGGER_ABSTRACT_GDB_ADAPTER
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
HEADERS += \
|
HEADERS += \
|
||||||
$$PWD/gdbprocessbase.h \
|
$$PWD/abstractgdbadapter.h \
|
||||||
$$PWD/gdbmi.h \
|
$$PWD/gdbmi.h \
|
||||||
$$PWD/gdbengine.h \
|
$$PWD/gdbengine.h \
|
||||||
$$PWD/gdboptionspage.h \
|
$$PWD/gdboptionspage.h \
|
||||||
$$PWD/callback.h \
|
$$PWD/callback.h \
|
||||||
$$PWD/trkutils.h \
|
$$PWD/trkutils.h \
|
||||||
$$PWD/trkclient.h \
|
$$PWD/trkclient.h \
|
||||||
$$PWD/symbianadapter.h \
|
$$PWD/trkgdbadapter.h \
|
||||||
#$$PWD/gdboptionspage.h \
|
#$$PWD/gdboptionspage.h \
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
@@ -15,7 +15,7 @@ SOURCES += \
|
|||||||
$$PWD/gdboptionspage.cpp \
|
$$PWD/gdboptionspage.cpp \
|
||||||
$$PWD/trkutils.cpp \
|
$$PWD/trkutils.cpp \
|
||||||
$$PWD/trkclient.cpp \
|
$$PWD/trkclient.cpp \
|
||||||
$$PWD/symbianadapter.cpp \
|
$$PWD/trkgdbadapter.cpp \
|
||||||
#$$PWD/gdboptionspage.cpp \
|
#$$PWD/gdboptionspage.cpp \
|
||||||
|
|
||||||
FORMS += $$PWD/gdboptionspage.ui
|
FORMS += $$PWD/gdboptionspage.ui
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
|
|
||||||
#include "gdbengine.h"
|
#include "gdbengine.h"
|
||||||
#include "gdboptionspage.h"
|
#include "gdboptionspage.h"
|
||||||
|
#include "trkgdbadapter.h"
|
||||||
|
|
||||||
#include "watchutils.h"
|
#include "watchutils.h"
|
||||||
#include "debuggeractions.h"
|
#include "debuggeractions.h"
|
||||||
@@ -140,11 +141,11 @@ static QByteArray parsePlainConsoleStream(const GdbResultRecord &record)
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// GdbProcess
|
// PlainGdbAdapter
|
||||||
//
|
//
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void GdbProcess::attach(GdbEngine *engine) const
|
void PlainGdbAdapter::attach(GdbEngine *engine) const
|
||||||
{
|
{
|
||||||
QFileInfo fi(engine->startParameters().executable);
|
QFileInfo fi(engine->startParameters().executable);
|
||||||
QString fileName = fi.absoluteFilePath();
|
QString fileName = fi.absoluteFilePath();
|
||||||
@@ -158,7 +159,7 @@ void GdbProcess::attach(GdbEngine *engine) const
|
|||||||
//
|
//
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
GdbEngine::GdbEngine(DebuggerManager *parent, GdbProcessBase *gdbProc) :
|
GdbEngine::GdbEngine(DebuggerManager *parent, AbstractGdbAdapter *gdbAdapter) :
|
||||||
#ifdef Q_OS_WIN // Do injection loading with MinGW (call loading does not work with 64bit)
|
#ifdef Q_OS_WIN // Do injection loading with MinGW (call loading does not work with 64bit)
|
||||||
m_dumperInjectionLoad(true),
|
m_dumperInjectionLoad(true),
|
||||||
#else
|
#else
|
||||||
@@ -167,7 +168,7 @@ GdbEngine::GdbEngine(DebuggerManager *parent, GdbProcessBase *gdbProc) :
|
|||||||
q(parent),
|
q(parent),
|
||||||
qq(parent->engineInterface())
|
qq(parent->engineInterface())
|
||||||
{
|
{
|
||||||
m_gdbProc = gdbProc;
|
m_gdbAdapter = gdbAdapter;
|
||||||
m_stubProc.setMode(Core::Utils::ConsoleProcess::Debug);
|
m_stubProc.setMode(Core::Utils::ConsoleProcess::Debug);
|
||||||
#ifdef Q_OS_UNIX
|
#ifdef Q_OS_UNIX
|
||||||
m_stubProc.setSettings(Core::ICore::instance()->settings());
|
m_stubProc.setSettings(Core::ICore::instance()->settings());
|
||||||
@@ -179,22 +180,22 @@ GdbEngine::GdbEngine(DebuggerManager *parent, GdbProcessBase *gdbProc) :
|
|||||||
GdbEngine::~GdbEngine()
|
GdbEngine::~GdbEngine()
|
||||||
{
|
{
|
||||||
// prevent sending error messages afterwards
|
// prevent sending error messages afterwards
|
||||||
m_gdbProc->disconnect(this);
|
m_gdbAdapter->disconnect(this);
|
||||||
delete m_gdbProc;
|
delete m_gdbAdapter;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GdbEngine::initializeConnections()
|
void GdbEngine::initializeConnections()
|
||||||
{
|
{
|
||||||
// Gdb Process interaction
|
// Gdb Process interaction
|
||||||
connect(m_gdbProc, SIGNAL(error(QProcess::ProcessError)),
|
connect(m_gdbAdapter, SIGNAL(error(QProcess::ProcessError)),
|
||||||
this, SLOT(gdbProcError(QProcess::ProcessError)));
|
this, SLOT(gdbProcError(QProcess::ProcessError)));
|
||||||
connect(m_gdbProc, SIGNAL(readyReadStandardOutput()),
|
connect(m_gdbAdapter, SIGNAL(readyReadStandardOutput()),
|
||||||
this, SLOT(readGdbStandardOutput()));
|
this, SLOT(readGdbStandardOutput()));
|
||||||
connect(m_gdbProc, SIGNAL(readyReadStandardError()),
|
connect(m_gdbAdapter, SIGNAL(readyReadStandardError()),
|
||||||
this, SLOT(readGdbStandardError()));
|
this, SLOT(readGdbStandardError()));
|
||||||
connect(m_gdbProc, SIGNAL(finished(int, QProcess::ExitStatus)),
|
connect(m_gdbAdapter, SIGNAL(finished(int, QProcess::ExitStatus)),
|
||||||
q, SLOT(exitDebugger()));
|
q, SLOT(exitDebugger()));
|
||||||
connect(m_gdbProc, SIGNAL(started()),
|
connect(m_gdbAdapter, SIGNAL(started()),
|
||||||
this, SLOT(startDebugger2()));
|
this, SLOT(startDebugger2()));
|
||||||
|
|
||||||
connect(&m_stubProc, SIGNAL(processError(QString)),
|
connect(&m_stubProc, SIGNAL(processError(QString)),
|
||||||
@@ -267,7 +268,7 @@ void GdbEngine::initializeVariables()
|
|||||||
// FIXME: unhandled:
|
// FIXME: unhandled:
|
||||||
//m_outputCodecState = QTextCodec::ConverterState();
|
//m_outputCodecState = QTextCodec::ConverterState();
|
||||||
//OutputCollector m_outputCollector;
|
//OutputCollector m_outputCollector;
|
||||||
//QProcess m_gdbProc;
|
//QProcess m_gdbAdapter;
|
||||||
//QProcess m_uploadProc;
|
//QProcess m_uploadProc;
|
||||||
//Core::Utils::ConsoleProcess m_stubProc;
|
//Core::Utils::ConsoleProcess m_stubProc;
|
||||||
}
|
}
|
||||||
@@ -633,7 +634,7 @@ void GdbEngine::stubError(const QString &msg)
|
|||||||
|
|
||||||
void GdbEngine::readGdbStandardError()
|
void GdbEngine::readGdbStandardError()
|
||||||
{
|
{
|
||||||
qWarning() << "Unexpected gdb stderr:" << m_gdbProc->readAllStandardError();
|
qWarning() << "Unexpected gdb stderr:" << m_gdbAdapter->readAllStandardError();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GdbEngine::readGdbStandardOutput()
|
void GdbEngine::readGdbStandardOutput()
|
||||||
@@ -641,7 +642,7 @@ void GdbEngine::readGdbStandardOutput()
|
|||||||
int newstart = 0;
|
int newstart = 0;
|
||||||
int scan = m_inbuffer.size();
|
int scan = m_inbuffer.size();
|
||||||
|
|
||||||
m_inbuffer.append(m_gdbProc->readAllStandardOutput());
|
m_inbuffer.append(m_gdbAdapter->readAllStandardOutput());
|
||||||
|
|
||||||
while (newstart < m_inbuffer.size()) {
|
while (newstart < m_inbuffer.size()) {
|
||||||
int start = newstart;
|
int start = newstart;
|
||||||
@@ -670,7 +671,7 @@ void GdbEngine::interruptInferior()
|
|||||||
{
|
{
|
||||||
qq->notifyInferiorStopRequested();
|
qq->notifyInferiorStopRequested();
|
||||||
|
|
||||||
if (m_gdbProc->state() == QProcess::NotRunning) {
|
if (m_gdbAdapter->state() == QProcess::NotRunning) {
|
||||||
debugMessage(_("TRYING TO INTERRUPT INFERIOR WITHOUT RUNNING GDB"));
|
debugMessage(_("TRYING TO INTERRUPT INFERIOR WITHOUT RUNNING GDB"));
|
||||||
qq->notifyInferiorExited();
|
qq->notifyInferiorExited();
|
||||||
return;
|
return;
|
||||||
@@ -717,7 +718,7 @@ void GdbEngine::postCommand(const QString &command, GdbCommandFlags flags,
|
|||||||
GdbCommandCallback callback, const char *callbackName,
|
GdbCommandCallback callback, const char *callbackName,
|
||||||
const QVariant &cookie)
|
const QVariant &cookie)
|
||||||
{
|
{
|
||||||
if (m_gdbProc->state() == QProcess::NotRunning) {
|
if (m_gdbAdapter->state() == QProcess::NotRunning) {
|
||||||
debugMessage(_("NO GDB PROCESS RUNNING, CMD IGNORED: ") + command);
|
debugMessage(_("NO GDB PROCESS RUNNING, CMD IGNORED: ") + command);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -846,12 +847,12 @@ void GdbEngine::handleResultRecord(const GdbResultRecord &record)
|
|||||||
|
|
||||||
void GdbEngine::executeDebuggerCommand(const QString &command)
|
void GdbEngine::executeDebuggerCommand(const QString &command)
|
||||||
{
|
{
|
||||||
if (m_gdbProc->state() != QProcess::Running) {
|
if (m_gdbAdapter->state() != QProcess::Running) {
|
||||||
debugMessage(_("GDB PROCESS NOT RUNNING, PLAIN CMD IGNORED: ") + command);
|
debugMessage(_("GDB PROCESS NOT RUNNING, PLAIN CMD IGNORED: ") + command);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_gdbProc->write(command.toLatin1() + "\r\n");
|
m_gdbAdapter->write(command.toLatin1() + "\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void GdbEngine::handleTargetCore(const GdbResultRecord &, const QVariant &)
|
void GdbEngine::handleTargetCore(const GdbResultRecord &, const QVariant &)
|
||||||
@@ -1292,7 +1293,7 @@ void GdbEngine::handleAsyncOutput2(const GdbMi &data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: Hack, remove as soon as we get real stack traces.
|
// FIXME: Hack, remove as soon as we get real stack traces.
|
||||||
if (m_gdbProc->isAdapter()) {
|
if (m_gdbAdapter->isAdapter()) {
|
||||||
StackFrame f;
|
StackFrame f;
|
||||||
f.file = QString::fromLocal8Bit(fullName.data());
|
f.file = QString::fromLocal8Bit(fullName.data());
|
||||||
f.line = frame.findChild("line").data().toInt();
|
f.line = frame.findChild("line").data().toInt();
|
||||||
@@ -1459,16 +1460,16 @@ void GdbEngine::detachDebugger()
|
|||||||
|
|
||||||
void GdbEngine::exitDebugger()
|
void GdbEngine::exitDebugger()
|
||||||
{
|
{
|
||||||
debugMessage(_("GDBENGINE EXITDEBUGGER: %1").arg(m_gdbProc->state()));
|
debugMessage(_("GDBENGINE EXITDEBUGGER: %1").arg(m_gdbAdapter->state()));
|
||||||
if (m_gdbProc->state() == QProcess::Starting) {
|
if (m_gdbAdapter->state() == QProcess::Starting) {
|
||||||
debugMessage(_("WAITING FOR GDB STARTUP TO SHUTDOWN: %1")
|
debugMessage(_("WAITING FOR GDB STARTUP TO SHUTDOWN: %1")
|
||||||
.arg(m_gdbProc->state()));
|
.arg(m_gdbAdapter->state()));
|
||||||
// FIXME: handle this!
|
// FIXME: handle this!
|
||||||
//m_gdbProc->waitForStarted();
|
//m_gdbAdapter->waitForStarted();
|
||||||
}
|
}
|
||||||
if (m_gdbProc->state() == QProcess::Running) {
|
if (m_gdbAdapter->state() == QProcess::Running) {
|
||||||
debugMessage(_("WAITING FOR RUNNING GDB TO SHUTDOWN: %1")
|
debugMessage(_("WAITING FOR RUNNING GDB TO SHUTDOWN: %1")
|
||||||
.arg(m_gdbProc->state()));
|
.arg(m_gdbAdapter->state()));
|
||||||
if (q->status() != DebuggerInferiorStopped
|
if (q->status() != DebuggerInferiorStopped
|
||||||
&& q->status() != DebuggerProcessStartingUp) {
|
&& q->status() != DebuggerProcessStartingUp) {
|
||||||
QTC_ASSERT(q->status() == DebuggerInferiorRunning,
|
QTC_ASSERT(q->status() == DebuggerInferiorRunning,
|
||||||
@@ -1481,17 +1482,17 @@ void GdbEngine::exitDebugger()
|
|||||||
postCommand(_("kill"));
|
postCommand(_("kill"));
|
||||||
postCommand(_("-gdb-exit"), CB(handleExit));
|
postCommand(_("-gdb-exit"), CB(handleExit));
|
||||||
// 20s can easily happen when loading webkit debug information
|
// 20s can easily happen when loading webkit debug information
|
||||||
if (!m_gdbProc->waitForFinished(20000)) {
|
if (!m_gdbAdapter->waitForFinished(20000)) {
|
||||||
debugMessage(_("FORCING TERMINATION: %1")
|
debugMessage(_("FORCING TERMINATION: %1")
|
||||||
.arg(m_gdbProc->state()));
|
.arg(m_gdbAdapter->state()));
|
||||||
m_gdbProc->terminate();
|
m_gdbAdapter->terminate();
|
||||||
m_gdbProc->waitForFinished(20000);
|
m_gdbAdapter->waitForFinished(20000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (m_gdbProc->state() != QProcess::NotRunning) {
|
if (m_gdbAdapter->state() != QProcess::NotRunning) {
|
||||||
debugMessage(_("PROBLEM STOPPING DEBUGGER: STATE %1")
|
debugMessage(_("PROBLEM STOPPING DEBUGGER: STATE %1")
|
||||||
.arg(m_gdbProc->state()));
|
.arg(m_gdbAdapter->state()));
|
||||||
m_gdbProc->kill();
|
m_gdbAdapter->kill();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_outputCollector.shutdown();
|
m_outputCollector.shutdown();
|
||||||
@@ -1514,9 +1515,9 @@ void GdbEngine::startDebugger(const QSharedPointer<DebuggerStartParameters> &sp)
|
|||||||
|
|
||||||
QStringList gdbArgs;
|
QStringList gdbArgs;
|
||||||
|
|
||||||
if (m_gdbProc->state() != QProcess::NotRunning) {
|
if (m_gdbAdapter->state() != QProcess::NotRunning) {
|
||||||
debugMessage(_("GDB IS ALREADY RUNNING, STATE: %1").arg(m_gdbProc->state()));
|
debugMessage(_("GDB IS ALREADY RUNNING, STATE: %1").arg(m_gdbAdapter->state()));
|
||||||
m_gdbProc->kill();
|
m_gdbAdapter->kill();
|
||||||
emitStartFailed();
|
emitStartFailed();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1562,16 +1563,16 @@ void GdbEngine::startDebugger(const QSharedPointer<DebuggerStartParameters> &sp)
|
|||||||
gdbArgs.prepend(_("--tty=") + m_outputCollector.serverName());
|
gdbArgs.prepend(_("--tty=") + m_outputCollector.serverName());
|
||||||
|
|
||||||
if (!m_startParameters.workingDir.isEmpty())
|
if (!m_startParameters.workingDir.isEmpty())
|
||||||
m_gdbProc->setWorkingDirectory(m_startParameters.workingDir);
|
m_gdbAdapter->setWorkingDirectory(m_startParameters.workingDir);
|
||||||
if (!m_startParameters.environment.isEmpty())
|
if (!m_startParameters.environment.isEmpty())
|
||||||
m_gdbProc->setEnvironment(m_startParameters.environment);
|
m_gdbAdapter->setEnvironment(m_startParameters.environment);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
qDebug() << "Command:" << q->settings()->m_gdbCmd;
|
qDebug() << "Command:" << q->settings()->m_gdbCmd;
|
||||||
qDebug() << "WorkingDirectory:" << m_gdbProc->workingDirectory();
|
qDebug() << "WorkingDirectory:" << m_gdbAdapter->workingDirectory();
|
||||||
qDebug() << "ScriptFile:" << q->settings()->m_scriptFile;
|
qDebug() << "ScriptFile:" << q->settings()->m_scriptFile;
|
||||||
qDebug() << "Environment:" << m_gdbProc->environment();
|
qDebug() << "Environment:" << m_gdbAdapter->environment();
|
||||||
qDebug() << "Arguments:" << gdbArgs;
|
qDebug() << "Arguments:" << gdbArgs;
|
||||||
qDebug() << "BuildDir:" << m_startParameters.buildDir;
|
qDebug() << "BuildDir:" << m_startParameters.buildDir;
|
||||||
qDebug() << "ExeFile:" << m_startParameters.executable;
|
qDebug() << "ExeFile:" << m_startParameters.executable;
|
||||||
@@ -1579,13 +1580,13 @@ void GdbEngine::startDebugger(const QSharedPointer<DebuggerStartParameters> &sp)
|
|||||||
|
|
||||||
QString loc = theDebuggerStringSetting(GdbLocation);
|
QString loc = theDebuggerStringSetting(GdbLocation);
|
||||||
q->showStatusMessage(tr("Starting Debugger: ") + loc + _c(' ') + gdbArgs.join(_(" ")));
|
q->showStatusMessage(tr("Starting Debugger: ") + loc + _c(' ') + gdbArgs.join(_(" ")));
|
||||||
m_gdbProc->start(loc, gdbArgs);
|
m_gdbAdapter->start(loc, gdbArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GdbEngine::emitStartFailed()
|
void GdbEngine::emitStartFailed()
|
||||||
{
|
{
|
||||||
// QMessageBox::critical(q->mainWindow(), tr("Debugger Startup Failure"),
|
// QMessageBox::critical(q->mainWindow(), tr("Debugger Startup Failure"),
|
||||||
// tr("Cannot start debugger: %1").arg(m_gdbProc->errorString()));
|
// tr("Cannot start debugger: %1").arg(m_gdbAdapter->errorString()));
|
||||||
m_outputCollector.shutdown();
|
m_outputCollector.shutdown();
|
||||||
m_stubProc.blockSignals(true);
|
m_stubProc.blockSignals(true);
|
||||||
m_stubProc.stop();
|
m_stubProc.stop();
|
||||||
@@ -1700,8 +1701,8 @@ void GdbEngine::startDebugger2()
|
|||||||
} else if (m_startParameters.useTerminal) {
|
} else if (m_startParameters.useTerminal) {
|
||||||
qq->breakHandler()->setAllPending();
|
qq->breakHandler()->setAllPending();
|
||||||
} else if (q->startMode() == StartInternal || q->startMode() == StartExternal) {
|
} else if (q->startMode() == StartInternal || q->startMode() == StartExternal) {
|
||||||
m_gdbProc->attach(this);
|
m_gdbAdapter->attach(this);
|
||||||
if (m_gdbProc->isAdapter()) {
|
if (m_gdbAdapter->isAdapter()) {
|
||||||
qq->notifyInferiorRunningRequested();
|
qq->notifyInferiorRunningRequested();
|
||||||
postCommand(_("-exec-continue"), CB(handleExecContinue));
|
postCommand(_("-exec-continue"), CB(handleExecContinue));
|
||||||
} else {
|
} else {
|
||||||
@@ -2059,7 +2060,7 @@ void GdbEngine::sendInsertBreakpoint(int index)
|
|||||||
// cmd += "-c " + data->condition + " ";
|
// cmd += "-c " + data->condition + " ";
|
||||||
#else
|
#else
|
||||||
QString cmd = _("-break-insert -f ");
|
QString cmd = _("-break-insert -f ");
|
||||||
if (m_gdbProc->isAdapter())
|
if (m_gdbAdapter->isAdapter())
|
||||||
cmd = _("-break-insert ");
|
cmd = _("-break-insert ");
|
||||||
//if (!data->condition.isEmpty())
|
//if (!data->condition.isEmpty())
|
||||||
// cmd += _("-c ") + data->condition + ' ';
|
// cmd += _("-c ") + data->condition + ' ';
|
||||||
@@ -4242,7 +4243,7 @@ IDebuggerEngine *createGdbEngine(DebuggerManager *parent,
|
|||||||
QList<Core::IOptionsPage*> *opts)
|
QList<Core::IOptionsPage*> *opts)
|
||||||
{
|
{
|
||||||
opts->push_back(new GdbOptionsPage);
|
opts->push_back(new GdbOptionsPage);
|
||||||
return new GdbEngine(parent, new GdbProcess);
|
return new GdbEngine(parent, new PlainGdbAdapter);
|
||||||
}
|
}
|
||||||
|
|
||||||
IDebuggerEngine *createSymbianEngine(DebuggerManager *parent,
|
IDebuggerEngine *createSymbianEngine(DebuggerManager *parent,
|
||||||
@@ -4250,7 +4251,7 @@ IDebuggerEngine *createSymbianEngine(DebuggerManager *parent,
|
|||||||
{
|
{
|
||||||
Q_UNUSED(opts);
|
Q_UNUSED(opts);
|
||||||
//opts->push_back(new GdbOptionsPage);
|
//opts->push_back(new GdbOptionsPage);
|
||||||
SymbianAdapter *adapter = new SymbianAdapter;
|
TrkGdbAdapter *adapter = new TrkGdbAdapter;
|
||||||
GdbEngine *engine = new GdbEngine(parent, adapter);
|
GdbEngine *engine = new GdbEngine(parent, adapter);
|
||||||
QObject::connect(adapter, SIGNAL(output(QString)),
|
QObject::connect(adapter, SIGNAL(output(QString)),
|
||||||
parent, SLOT(showDebuggerOutput(QString)));
|
parent, SLOT(showDebuggerOutput(QString)));
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
#include "idebuggerengine.h"
|
#include "idebuggerengine.h"
|
||||||
#include "debuggermanager.h" // only for StartParameters
|
#include "debuggermanager.h" // only for StartParameters
|
||||||
#include "gdbmi.h"
|
#include "gdbmi.h"
|
||||||
#include "gdbprocessbase.h"
|
#include "abstractgdbadapter.h"
|
||||||
#include "outputcollector.h"
|
#include "outputcollector.h"
|
||||||
#include "watchutils.h"
|
#include "watchutils.h"
|
||||||
|
|
||||||
@@ -75,11 +75,11 @@ enum DebuggingHelperState
|
|||||||
DebuggingHelperUnavailable,
|
DebuggingHelperUnavailable,
|
||||||
};
|
};
|
||||||
|
|
||||||
class GdbProcess : public GdbProcessBase
|
class PlainGdbAdapter : public AbstractGdbAdapter
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GdbProcess(QObject *parent = 0)
|
PlainGdbAdapter(QObject *parent = 0)
|
||||||
: GdbProcessBase(parent)
|
: AbstractGdbAdapter(parent)
|
||||||
{
|
{
|
||||||
connect(&m_proc, SIGNAL(error(QProcess::ProcessError)),
|
connect(&m_proc, SIGNAL(error(QProcess::ProcessError)),
|
||||||
this, SIGNAL(error(QProcess::ProcessError)));
|
this, SIGNAL(error(QProcess::ProcessError)));
|
||||||
@@ -118,7 +118,7 @@ class GdbEngine : public IDebuggerEngine
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GdbEngine(DebuggerManager *parent, GdbProcessBase *gdbProc);
|
GdbEngine(DebuggerManager *parent, AbstractGdbAdapter *gdbAdapter);
|
||||||
~GdbEngine();
|
~GdbEngine();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
@@ -127,8 +127,8 @@ signals:
|
|||||||
void applicationOutputAvailable(const QString &output);
|
void applicationOutputAvailable(const QString &output);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend class GdbProcess;
|
friend class PlainGdbAdapter;
|
||||||
friend class SymbianAdapter;
|
friend class TrkGdbAdapter;
|
||||||
|
|
||||||
const DebuggerStartParameters &startParameters() const
|
const DebuggerStartParameters &startParameters() const
|
||||||
{ return m_startParameters; }
|
{ return m_startParameters; }
|
||||||
@@ -299,7 +299,7 @@ private:
|
|||||||
|
|
||||||
QByteArray m_inbuffer;
|
QByteArray m_inbuffer;
|
||||||
|
|
||||||
GdbProcessBase *m_gdbProc;
|
AbstractGdbAdapter *m_gdbAdapter;
|
||||||
QProcess m_uploadProc;
|
QProcess m_uploadProc;
|
||||||
|
|
||||||
Core::Utils::ConsoleProcess m_stubProc;
|
Core::Utils::ConsoleProcess m_stubProc;
|
||||||
|
|||||||
@@ -27,12 +27,12 @@
|
|||||||
**
|
**
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
#include "symbianadapter.h"
|
#include "trkgdbadapter.h"
|
||||||
#ifndef STANDALONE_RUNNER
|
#ifndef STANDALONE_RUNNER
|
||||||
#include "gdbengine.h"
|
#include "gdbengine.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define TrkCB(s) TrkCallback(this, &SymbianAdapter::s)
|
#define TrkCB(s) TrkCallback(this, &TrkGdbAdapter::s)
|
||||||
|
|
||||||
|
|
||||||
using namespace trk;
|
using namespace trk;
|
||||||
@@ -69,7 +69,7 @@ namespace Internal {
|
|||||||
|
|
||||||
trk::Endianness m_registerEndianness = LittleEndian;
|
trk::Endianness m_registerEndianness = LittleEndian;
|
||||||
|
|
||||||
SymbianAdapter::SymbianAdapter()
|
TrkGdbAdapter::TrkGdbAdapter()
|
||||||
{
|
{
|
||||||
m_running = false;
|
m_running = false;
|
||||||
m_gdbAckMode = true;
|
m_gdbAckMode = true;
|
||||||
@@ -115,23 +115,23 @@ SymbianAdapter::SymbianAdapter()
|
|||||||
this, SLOT(trkLogMessage(QString)));
|
this, SLOT(trkLogMessage(QString)));
|
||||||
}
|
}
|
||||||
|
|
||||||
SymbianAdapter::~SymbianAdapter()
|
TrkGdbAdapter::~TrkGdbAdapter()
|
||||||
{
|
{
|
||||||
m_gdbServer.close();
|
m_gdbServer.close();
|
||||||
logMessage("Shutting down.\n");
|
logMessage("Shutting down.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::trkLogMessage(const QString &msg)
|
void TrkGdbAdapter::trkLogMessage(const QString &msg)
|
||||||
{
|
{
|
||||||
logMessage("TRK " + msg);
|
logMessage("TRK " + msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::setGdbServerName(const QString &name)
|
void TrkGdbAdapter::setGdbServerName(const QString &name)
|
||||||
{
|
{
|
||||||
m_gdbServerName = name;
|
m_gdbServerName = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString SymbianAdapter::gdbServerIP() const
|
QString TrkGdbAdapter::gdbServerIP() const
|
||||||
{
|
{
|
||||||
int pos = m_gdbServerName.indexOf(':');
|
int pos = m_gdbServerName.indexOf(':');
|
||||||
if (pos == -1)
|
if (pos == -1)
|
||||||
@@ -139,7 +139,7 @@ QString SymbianAdapter::gdbServerIP() const
|
|||||||
return m_gdbServerName.left(pos);
|
return m_gdbServerName.left(pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint SymbianAdapter::gdbServerPort() const
|
uint TrkGdbAdapter::gdbServerPort() const
|
||||||
{
|
{
|
||||||
int pos = m_gdbServerName.indexOf(':');
|
int pos = m_gdbServerName.indexOf(':');
|
||||||
if (pos == -1)
|
if (pos == -1)
|
||||||
@@ -147,7 +147,7 @@ uint SymbianAdapter::gdbServerPort() const
|
|||||||
return m_gdbServerName.mid(pos + 1).toUInt();
|
return m_gdbServerName.mid(pos + 1).toUInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray SymbianAdapter::trkContinueMessage()
|
QByteArray TrkGdbAdapter::trkContinueMessage()
|
||||||
{
|
{
|
||||||
QByteArray ba;
|
QByteArray ba;
|
||||||
appendInt(&ba, m_session.pid);
|
appendInt(&ba, m_session.pid);
|
||||||
@@ -155,7 +155,7 @@ QByteArray SymbianAdapter::trkContinueMessage()
|
|||||||
return ba;
|
return ba;
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray SymbianAdapter::trkReadRegisterMessage()
|
QByteArray TrkGdbAdapter::trkReadRegisterMessage()
|
||||||
{
|
{
|
||||||
QByteArray ba;
|
QByteArray ba;
|
||||||
appendByte(&ba, 0); // Register set, only 0 supported
|
appendByte(&ba, 0); // Register set, only 0 supported
|
||||||
@@ -166,7 +166,7 @@ QByteArray SymbianAdapter::trkReadRegisterMessage()
|
|||||||
return ba;
|
return ba;
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray SymbianAdapter::trkReadMemoryMessage(uint addr, uint len)
|
QByteArray TrkGdbAdapter::trkReadMemoryMessage(uint addr, uint len)
|
||||||
{
|
{
|
||||||
QByteArray ba;
|
QByteArray ba;
|
||||||
appendByte(&ba, 0x08); // Options, FIXME: why?
|
appendByte(&ba, 0x08); // Options, FIXME: why?
|
||||||
@@ -177,7 +177,7 @@ QByteArray SymbianAdapter::trkReadMemoryMessage(uint addr, uint len)
|
|||||||
return ba;
|
return ba;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::startInferior()
|
void TrkGdbAdapter::startInferior()
|
||||||
{
|
{
|
||||||
QString errorMessage;
|
QString errorMessage;
|
||||||
if (!m_trkDevice.open(m_rfcommDevice, &errorMessage)) {
|
if (!m_trkDevice.open(m_rfcommDevice, &errorMessage)) {
|
||||||
@@ -207,7 +207,7 @@ void SymbianAdapter::startInferior()
|
|||||||
//sendTrkMessage(TRK_WRITE_QUEUE_NOOP_CODE, TrkCB(startGdbServer));
|
//sendTrkMessage(TRK_WRITE_QUEUE_NOOP_CODE, TrkCB(startGdbServer));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::logMessage(const QString &msg)
|
void TrkGdbAdapter::logMessage(const QString &msg)
|
||||||
{
|
{
|
||||||
if (m_verbose)
|
if (m_verbose)
|
||||||
emit output(msg);
|
emit output(msg);
|
||||||
@@ -216,7 +216,7 @@ void SymbianAdapter::logMessage(const QString &msg)
|
|||||||
//
|
//
|
||||||
// Gdb
|
// Gdb
|
||||||
//
|
//
|
||||||
void SymbianAdapter::handleGdbConnection()
|
void TrkGdbAdapter::handleGdbConnection()
|
||||||
{
|
{
|
||||||
logMessage("HANDLING GDB CONNECTION");
|
logMessage("HANDLING GDB CONNECTION");
|
||||||
|
|
||||||
@@ -232,7 +232,7 @@ static inline QString msgGdbPacket(const QString &p)
|
|||||||
return QLatin1String("gdb: ") + p;
|
return QLatin1String("gdb: ") + p;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::readGdbServerCommand()
|
void TrkGdbAdapter::readGdbServerCommand()
|
||||||
{
|
{
|
||||||
QByteArray packet = m_gdbConnection->readAll();
|
QByteArray packet = m_gdbConnection->readAll();
|
||||||
m_gdbReadBuffer.append(packet);
|
m_gdbReadBuffer.append(packet);
|
||||||
@@ -299,7 +299,7 @@ void SymbianAdapter::readGdbServerCommand()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SymbianAdapter::sendGdbServerPacket(const QByteArray &packet, bool doFlush)
|
bool TrkGdbAdapter::sendGdbServerPacket(const QByteArray &packet, bool doFlush)
|
||||||
{
|
{
|
||||||
if (!m_gdbConnection) {
|
if (!m_gdbConnection) {
|
||||||
logMessage(QString::fromLatin1("Cannot write to gdb: No connection (%1)")
|
logMessage(QString::fromLatin1("Cannot write to gdb: No connection (%1)")
|
||||||
@@ -321,7 +321,7 @@ bool SymbianAdapter::sendGdbServerPacket(const QByteArray &packet, bool doFlush)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::sendGdbServerAck()
|
void TrkGdbAdapter::sendGdbServerAck()
|
||||||
{
|
{
|
||||||
if (!m_gdbAckMode)
|
if (!m_gdbAckMode)
|
||||||
return;
|
return;
|
||||||
@@ -330,7 +330,7 @@ void SymbianAdapter::sendGdbServerAck()
|
|||||||
sendGdbServerPacket(packet, false);
|
sendGdbServerPacket(packet, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::sendGdbServerMessage(const QByteArray &msg, const QByteArray &logNote)
|
void TrkGdbAdapter::sendGdbServerMessage(const QByteArray &msg, const QByteArray &logNote)
|
||||||
{
|
{
|
||||||
byte sum = 0;
|
byte sum = 0;
|
||||||
for (int i = 0; i != msg.size(); ++i)
|
for (int i = 0; i != msg.size(); ++i)
|
||||||
@@ -351,14 +351,14 @@ void SymbianAdapter::sendGdbServerMessage(const QByteArray &msg, const QByteArra
|
|||||||
sendGdbServerPacket(packet, true);
|
sendGdbServerPacket(packet, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::sendGdbServerMessageAfterTrkResponse(const QByteArray &msg,
|
void TrkGdbAdapter::sendGdbServerMessageAfterTrkResponse(const QByteArray &msg,
|
||||||
const QByteArray &logNote)
|
const QByteArray &logNote)
|
||||||
{
|
{
|
||||||
QByteArray ba = msg + char(1) + logNote;
|
QByteArray ba = msg + char(1) + logNote;
|
||||||
sendTrkMessage(TRK_WRITE_QUEUE_NOOP_CODE, TrkCB(reportToGdb), "", ba); // Answer gdb
|
sendTrkMessage(TRK_WRITE_QUEUE_NOOP_CODE, TrkCB(reportToGdb), "", ba); // Answer gdb
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::reportToGdb(const TrkResult &result)
|
void TrkGdbAdapter::reportToGdb(const TrkResult &result)
|
||||||
{
|
{
|
||||||
QByteArray message = result.cookie.toByteArray();
|
QByteArray message = result.cookie.toByteArray();
|
||||||
QByteArray note;
|
QByteArray note;
|
||||||
@@ -374,7 +374,7 @@ void SymbianAdapter::reportToGdb(const TrkResult &result)
|
|||||||
sendGdbServerMessage(message, note);
|
sendGdbServerMessage(message, note);
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray SymbianAdapter::trkBreakpointMessage(uint addr, uint len, bool armMode)
|
QByteArray TrkGdbAdapter::trkBreakpointMessage(uint addr, uint len, bool armMode)
|
||||||
{
|
{
|
||||||
QByteArray ba;
|
QByteArray ba;
|
||||||
appendByte(&ba, 0x82); // unused option
|
appendByte(&ba, 0x82); // unused option
|
||||||
@@ -387,7 +387,7 @@ QByteArray SymbianAdapter::trkBreakpointMessage(uint addr, uint len, bool armMod
|
|||||||
return ba;
|
return ba;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::handleGdbServerCommand(const QByteArray &cmd)
|
void TrkGdbAdapter::handleGdbServerCommand(const QByteArray &cmd)
|
||||||
{
|
{
|
||||||
// http://sourceware.org/gdb/current/onlinedocs/gdb_34.html
|
// http://sourceware.org/gdb/current/onlinedocs/gdb_34.html
|
||||||
if (0) {}
|
if (0) {}
|
||||||
@@ -717,7 +717,7 @@ void SymbianAdapter::handleGdbServerCommand(const QByteArray &cmd)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::executeCommand(const QString &msg)
|
void TrkGdbAdapter::executeCommand(const QString &msg)
|
||||||
{
|
{
|
||||||
if (msg == "EI") {
|
if (msg == "EI") {
|
||||||
sendGdbMessage("-exec-interrupt");
|
sendGdbMessage("-exec-interrupt");
|
||||||
@@ -734,24 +734,24 @@ void SymbianAdapter::executeCommand(const QString &msg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::sendTrkMessage(byte code, TrkCallback callback,
|
void TrkGdbAdapter::sendTrkMessage(byte code, TrkCallback callback,
|
||||||
const QByteArray &data, const QVariant &cookie)
|
const QByteArray &data, const QVariant &cookie)
|
||||||
{
|
{
|
||||||
m_trkDevice.sendTrkMessage(code, callback, data, cookie);
|
m_trkDevice.sendTrkMessage(code, callback, data, cookie);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::sendTrkAck(byte token)
|
void TrkGdbAdapter::sendTrkAck(byte token)
|
||||||
{
|
{
|
||||||
logMessage(QString("SENDING ACKNOWLEDGEMENT FOR TOKEN %1").arg(int(token)));
|
logMessage(QString("SENDING ACKNOWLEDGEMENT FOR TOKEN %1").arg(int(token)));
|
||||||
m_trkDevice.sendTrkAck(token);
|
m_trkDevice.sendTrkAck(token);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::handleTrkError(const QString &msg)
|
void TrkGdbAdapter::handleTrkError(const QString &msg)
|
||||||
{
|
{
|
||||||
logMessage("## TRK ERROR: " + msg);
|
logMessage("## TRK ERROR: " + msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::handleTrkResult(const TrkResult &result)
|
void TrkGdbAdapter::handleTrkResult(const TrkResult &result)
|
||||||
{
|
{
|
||||||
if (result.isDebugOutput) {
|
if (result.isDebugOutput) {
|
||||||
sendTrkAck(result.token);
|
sendTrkAck(result.token);
|
||||||
@@ -874,7 +874,7 @@ void SymbianAdapter::handleTrkResult(const TrkResult &result)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::handleCpuType(const TrkResult &result)
|
void TrkGdbAdapter::handleCpuType(const TrkResult &result)
|
||||||
{
|
{
|
||||||
//---TRK------------------------------------------------------
|
//---TRK------------------------------------------------------
|
||||||
// Command: 0x80 Acknowledge
|
// Command: 0x80 Acknowledge
|
||||||
@@ -896,7 +896,7 @@ void SymbianAdapter::handleCpuType(const TrkResult &result)
|
|||||||
logMessage(logMsg);
|
logMessage(logMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::handleCreateProcess(const TrkResult &result)
|
void TrkGdbAdapter::handleCreateProcess(const TrkResult &result)
|
||||||
{
|
{
|
||||||
// 40 00 00]
|
// 40 00 00]
|
||||||
//logMessage(" RESULT: " + result.toString());
|
//logMessage(" RESULT: " + result.toString());
|
||||||
@@ -919,7 +919,7 @@ void SymbianAdapter::handleCreateProcess(const TrkResult &result)
|
|||||||
startGdb();
|
startGdb();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::handleReadRegisters(const TrkResult &result)
|
void TrkGdbAdapter::handleReadRegisters(const TrkResult &result)
|
||||||
{
|
{
|
||||||
logMessage(" RESULT: " + result.toString());
|
logMessage(" RESULT: " + result.toString());
|
||||||
// [80 0B 00 00 00 00 00 C9 24 FF BC 00 00 00 00 00
|
// [80 0B 00 00 00 00 00 C9 24 FF BC 00 00 00 00 00
|
||||||
@@ -933,7 +933,7 @@ void SymbianAdapter::handleReadRegisters(const TrkResult &result)
|
|||||||
m_snapshot.registers[i] = extractInt(data + 4 * i);
|
m_snapshot.registers[i] = extractInt(data + 4 * i);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::handleAndReportReadRegisters(const TrkResult &result)
|
void TrkGdbAdapter::handleAndReportReadRegisters(const TrkResult &result)
|
||||||
{
|
{
|
||||||
handleReadRegisters(result);
|
handleReadRegisters(result);
|
||||||
QByteArray ba;
|
QByteArray ba;
|
||||||
@@ -959,7 +959,7 @@ static QString msgMemoryReadError(int code, uint addr, uint len = 0)
|
|||||||
.arg(code).arg(addr, 0 ,16).arg(lenS);
|
.arg(code).arg(addr, 0 ,16).arg(lenS);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::handleReadMemoryBuffered(const TrkResult &result)
|
void TrkGdbAdapter::handleReadMemoryBuffered(const TrkResult &result)
|
||||||
{
|
{
|
||||||
if (extractShort(result.data.data() + 1) + 3 != result.data.size())
|
if (extractShort(result.data.data() + 1) + 3 != result.data.size())
|
||||||
logMessage("\n BAD MEMORY RESULT: " + result.data.toHex() + "\n");
|
logMessage("\n BAD MEMORY RESULT: " + result.data.toHex() + "\n");
|
||||||
@@ -973,7 +973,7 @@ void SymbianAdapter::handleReadMemoryBuffered(const TrkResult &result)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Format log message for memory access with some smartness about registers
|
// Format log message for memory access with some smartness about registers
|
||||||
QByteArray SymbianAdapter::memoryReadLogMessage(uint addr, uint len, const QByteArray &ba) const
|
QByteArray TrkGdbAdapter::memoryReadLogMessage(uint addr, uint len, const QByteArray &ba) const
|
||||||
{
|
{
|
||||||
QByteArray logMsg = "memory contents";
|
QByteArray logMsg = "memory contents";
|
||||||
if (m_verbose > 1) {
|
if (m_verbose > 1) {
|
||||||
@@ -1003,7 +1003,7 @@ QByteArray SymbianAdapter::memoryReadLogMessage(uint addr, uint len, const QByte
|
|||||||
return logMsg;
|
return logMsg;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::reportReadMemoryBuffered(const TrkResult &result)
|
void TrkGdbAdapter::reportReadMemoryBuffered(const TrkResult &result)
|
||||||
{
|
{
|
||||||
const qulonglong cookie = result.cookie.toULongLong();
|
const qulonglong cookie = result.cookie.toULongLong();
|
||||||
const uint addr = cookie >> 32;
|
const uint addr = cookie >> 32;
|
||||||
@@ -1033,7 +1033,7 @@ void SymbianAdapter::reportReadMemoryBuffered(const TrkResult &result)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::handleReadMemoryUnbuffered(const TrkResult &result)
|
void TrkGdbAdapter::handleReadMemoryUnbuffered(const TrkResult &result)
|
||||||
{
|
{
|
||||||
//logMessage("UNBUFFERED MEMORY READ: " + stringFromArray(result.data));
|
//logMessage("UNBUFFERED MEMORY READ: " + stringFromArray(result.data));
|
||||||
const uint blockaddr = result.cookie.toUInt();
|
const uint blockaddr = result.cookie.toUInt();
|
||||||
@@ -1048,7 +1048,7 @@ void SymbianAdapter::handleReadMemoryUnbuffered(const TrkResult &result)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::handleStepRange(const TrkResult &result)
|
void TrkGdbAdapter::handleStepRange(const TrkResult &result)
|
||||||
{
|
{
|
||||||
// [80 0f 00]
|
// [80 0f 00]
|
||||||
if (result.errorCode()) {
|
if (result.errorCode()) {
|
||||||
@@ -1061,7 +1061,7 @@ void SymbianAdapter::handleStepRange(const TrkResult &result)
|
|||||||
//sendGdbServerMessage("S05", "Stepping finished");
|
//sendGdbServerMessage("S05", "Stepping finished");
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::handleAndReportSetBreakpoint(const TrkResult &result)
|
void TrkGdbAdapter::handleAndReportSetBreakpoint(const TrkResult &result)
|
||||||
{
|
{
|
||||||
//---TRK------------------------------------------------------
|
//---TRK------------------------------------------------------
|
||||||
// Command: 0x80 Acknowledge
|
// Command: 0x80 Acknowledge
|
||||||
@@ -1076,7 +1076,7 @@ void SymbianAdapter::handleAndReportSetBreakpoint(const TrkResult &result)
|
|||||||
//sendGdbServerMessage("OK");
|
//sendGdbServerMessage("OK");
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::handleClearBreakpoint(const TrkResult &result)
|
void TrkGdbAdapter::handleClearBreakpoint(const TrkResult &result)
|
||||||
{
|
{
|
||||||
logMessage("CLEAR BREAKPOINT ");
|
logMessage("CLEAR BREAKPOINT ");
|
||||||
if (result.errorCode()) {
|
if (result.errorCode()) {
|
||||||
@@ -1086,7 +1086,7 @@ void SymbianAdapter::handleClearBreakpoint(const TrkResult &result)
|
|||||||
sendGdbServerMessage("OK");
|
sendGdbServerMessage("OK");
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::handleSignalContinue(const TrkResult &result)
|
void TrkGdbAdapter::handleSignalContinue(const TrkResult &result)
|
||||||
{
|
{
|
||||||
int signalNumber = result.cookie.toInt();
|
int signalNumber = result.cookie.toInt();
|
||||||
logMessage(" HANDLE SIGNAL CONTINUE: " + stringFromArray(result.data));
|
logMessage(" HANDLE SIGNAL CONTINUE: " + stringFromArray(result.data));
|
||||||
@@ -1095,7 +1095,7 @@ void SymbianAdapter::handleSignalContinue(const TrkResult &result)
|
|||||||
sendGdbServerMessage("W81"); // "Process exited with result 1
|
sendGdbServerMessage("W81"); // "Process exited with result 1
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::handleSupportMask(const TrkResult &result)
|
void TrkGdbAdapter::handleSupportMask(const TrkResult &result)
|
||||||
{
|
{
|
||||||
const char *data = result.data.data();
|
const char *data = result.data.data();
|
||||||
QByteArray str;
|
QByteArray str;
|
||||||
@@ -1108,7 +1108,7 @@ void SymbianAdapter::handleSupportMask(const TrkResult &result)
|
|||||||
logMessage("SUPPORTED: " + str);
|
logMessage("SUPPORTED: " + str);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::handleTrkVersions(const TrkResult &result)
|
void TrkGdbAdapter::handleTrkVersions(const TrkResult &result)
|
||||||
{
|
{
|
||||||
QString logMsg;
|
QString logMsg;
|
||||||
QTextStream str(&logMsg);
|
QTextStream str(&logMsg);
|
||||||
@@ -1122,12 +1122,12 @@ void SymbianAdapter::handleTrkVersions(const TrkResult &result)
|
|||||||
logMessage(logMsg);
|
logMessage(logMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::handleDisconnect(const TrkResult & /*result*/)
|
void TrkGdbAdapter::handleDisconnect(const TrkResult & /*result*/)
|
||||||
{
|
{
|
||||||
logMessage(QLatin1String("Trk disconnected"));
|
logMessage(QLatin1String("Trk disconnected"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::readMemory(uint addr, uint len)
|
void TrkGdbAdapter::readMemory(uint addr, uint len)
|
||||||
{
|
{
|
||||||
Q_ASSERT(len < (2 << 16));
|
Q_ASSERT(len < (2 << 16));
|
||||||
|
|
||||||
@@ -1161,7 +1161,7 @@ void SymbianAdapter::readMemory(uint addr, uint len)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::interruptInferior()
|
void TrkGdbAdapter::interruptInferior()
|
||||||
{
|
{
|
||||||
QByteArray ba;
|
QByteArray ba;
|
||||||
// stop the thread (2) or the process (1) or the whole system (0)
|
// stop the thread (2) or the process (1) or the whole system (0)
|
||||||
@@ -1172,30 +1172,30 @@ void SymbianAdapter::interruptInferior()
|
|||||||
sendTrkMessage(0x1a, TrkCallback(), ba, "Interrupting...");
|
sendTrkMessage(0x1a, TrkCallback(), ba, "Interrupting...");
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::handleGdbError(QProcess::ProcessError error)
|
void TrkGdbAdapter::handleGdbError(QProcess::ProcessError error)
|
||||||
{
|
{
|
||||||
emit output(QString("GDB: Process Error %1: %2").arg(error).arg(errorString()));
|
emit output(QString("GDB: Process Error %1: %2").arg(error).arg(errorString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::handleGdbFinished(int exitCode, QProcess::ExitStatus exitStatus)
|
void TrkGdbAdapter::handleGdbFinished(int exitCode, QProcess::ExitStatus exitStatus)
|
||||||
{
|
{
|
||||||
emit output(QString("GDB: ProcessFinished %1 %2").arg(exitCode).arg(exitStatus));
|
emit output(QString("GDB: ProcessFinished %1 %2").arg(exitCode).arg(exitStatus));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::handleGdbStarted()
|
void TrkGdbAdapter::handleGdbStarted()
|
||||||
{
|
{
|
||||||
emit output(QString("GDB: Process Started"));
|
emit output(QString("GDB: Process Started"));
|
||||||
emit started();
|
emit started();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::handleGdbStateChanged(QProcess::ProcessState newState)
|
void TrkGdbAdapter::handleGdbStateChanged(QProcess::ProcessState newState)
|
||||||
{
|
{
|
||||||
emit output(QString("GDB: Process State %1").arg(newState));
|
emit output(QString("GDB: Process State %1").arg(newState));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::run()
|
void TrkGdbAdapter::run()
|
||||||
{
|
{
|
||||||
emit output("### Starting SymbianAdapter");
|
emit output("### Starting TrkGdbAdapter");
|
||||||
m_rfcommProc.start("rfcomm listen " + m_rfcommDevice + " 1");
|
m_rfcommProc.start("rfcomm listen " + m_rfcommDevice + " 1");
|
||||||
m_rfcommProc.waitForStarted();
|
m_rfcommProc.waitForStarted();
|
||||||
|
|
||||||
@@ -1212,7 +1212,7 @@ void SymbianAdapter::run()
|
|||||||
startInferior();
|
startInferior();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::startGdb()
|
void TrkGdbAdapter::startGdb()
|
||||||
{
|
{
|
||||||
if (!m_gdbServer.listen(QHostAddress(gdbServerIP()), gdbServerPort())) {
|
if (!m_gdbServer.listen(QHostAddress(gdbServerIP()), gdbServerPort())) {
|
||||||
logMessage(QString("Unable to start the gdb server at %1: %2.")
|
logMessage(QString("Unable to start the gdb server at %1: %2.")
|
||||||
@@ -1235,7 +1235,7 @@ void SymbianAdapter::startGdb()
|
|||||||
m_gdbProc.start(QDir::currentPath() + "/cs-gdb", gdbArgs);
|
m_gdbProc.start(QDir::currentPath() + "/cs-gdb", gdbArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::sendGdbMessage(const QString &msg, GdbCallback callback,
|
void TrkGdbAdapter::sendGdbMessage(const QString &msg, GdbCallback callback,
|
||||||
const QVariant &cookie)
|
const QVariant &cookie)
|
||||||
{
|
{
|
||||||
GdbCommand data;
|
GdbCommand data;
|
||||||
@@ -1250,35 +1250,35 @@ void SymbianAdapter::sendGdbMessage(const QString &msg, GdbCallback callback,
|
|||||||
// GdbProcessBase
|
// GdbProcessBase
|
||||||
//
|
//
|
||||||
|
|
||||||
void SymbianAdapter::handleRfcommReadyReadStandardError()
|
void TrkGdbAdapter::handleRfcommReadyReadStandardError()
|
||||||
{
|
{
|
||||||
QByteArray ba = m_rfcommProc.readAllStandardError();
|
QByteArray ba = m_rfcommProc.readAllStandardError();
|
||||||
emit output(QString("RFCONN stderr: %1").arg(QString::fromLatin1(ba)));
|
emit output(QString("RFCONN stderr: %1").arg(QString::fromLatin1(ba)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::handleRfcommReadyReadStandardOutput()
|
void TrkGdbAdapter::handleRfcommReadyReadStandardOutput()
|
||||||
{
|
{
|
||||||
QByteArray ba = m_rfcommProc.readAllStandardOutput();
|
QByteArray ba = m_rfcommProc.readAllStandardOutput();
|
||||||
emit output(QString("RFCONN stdout: %1").arg(QString::fromLatin1(ba)));
|
emit output(QString("RFCONN stdout: %1").arg(QString::fromLatin1(ba)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SymbianAdapter::handleRfcommError(QProcess::ProcessError error)
|
void TrkGdbAdapter::handleRfcommError(QProcess::ProcessError error)
|
||||||
{
|
{
|
||||||
emit output(QString("RFCOMM: Process Error %1: %2").arg(error).arg(errorString()));
|
emit output(QString("RFCOMM: Process Error %1: %2").arg(error).arg(errorString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::handleRfcommFinished(int exitCode, QProcess::ExitStatus exitStatus)
|
void TrkGdbAdapter::handleRfcommFinished(int exitCode, QProcess::ExitStatus exitStatus)
|
||||||
{
|
{
|
||||||
emit output(QString("RFCOMM: ProcessFinished %1 %2").arg(exitCode).arg(exitStatus));
|
emit output(QString("RFCOMM: ProcessFinished %1 %2").arg(exitCode).arg(exitStatus));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::handleRfcommStarted()
|
void TrkGdbAdapter::handleRfcommStarted()
|
||||||
{
|
{
|
||||||
emit output(QString("RFCOMM: Process Started"));
|
emit output(QString("RFCOMM: Process Started"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::handleRfcommStateChanged(QProcess::ProcessState newState)
|
void TrkGdbAdapter::handleRfcommStateChanged(QProcess::ProcessState newState)
|
||||||
{
|
{
|
||||||
emit output(QString("RFCOMM: Process State %1").arg(newState));
|
emit output(QString("RFCOMM: Process State %1").arg(newState));
|
||||||
}
|
}
|
||||||
@@ -1287,64 +1287,64 @@ void SymbianAdapter::handleRfcommStateChanged(QProcess::ProcessState newState)
|
|||||||
// GdbProcessBase
|
// GdbProcessBase
|
||||||
//
|
//
|
||||||
|
|
||||||
void SymbianAdapter::start(const QString &program, const QStringList &args,
|
void TrkGdbAdapter::start(const QString &program, const QStringList &args,
|
||||||
QIODevice::OpenMode mode)
|
QIODevice::OpenMode mode)
|
||||||
{
|
{
|
||||||
Q_UNUSED(mode);
|
Q_UNUSED(mode);
|
||||||
run();
|
run();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::kill()
|
void TrkGdbAdapter::kill()
|
||||||
{
|
{
|
||||||
m_gdbProc.kill();
|
m_gdbProc.kill();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::terminate()
|
void TrkGdbAdapter::terminate()
|
||||||
{
|
{
|
||||||
m_gdbProc.terminate();
|
m_gdbProc.terminate();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SymbianAdapter::waitForFinished(int msecs)
|
bool TrkGdbAdapter::waitForFinished(int msecs)
|
||||||
{
|
{
|
||||||
return m_gdbProc.waitForFinished(msecs);
|
return m_gdbProc.waitForFinished(msecs);
|
||||||
}
|
}
|
||||||
|
|
||||||
QProcess::ProcessState SymbianAdapter::state() const
|
QProcess::ProcessState TrkGdbAdapter::state() const
|
||||||
{
|
{
|
||||||
return m_gdbProc.state();
|
return m_gdbProc.state();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString SymbianAdapter::errorString() const
|
QString TrkGdbAdapter::errorString() const
|
||||||
{
|
{
|
||||||
return m_gdbProc.errorString();
|
return m_gdbProc.errorString();
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray SymbianAdapter::readAllStandardError()
|
QByteArray TrkGdbAdapter::readAllStandardError()
|
||||||
{
|
{
|
||||||
return m_gdbProc.readAllStandardError();
|
return m_gdbProc.readAllStandardError();
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray SymbianAdapter::readAllStandardOutput()
|
QByteArray TrkGdbAdapter::readAllStandardOutput()
|
||||||
{
|
{
|
||||||
return m_gdbProc.readAllStandardOutput();
|
return m_gdbProc.readAllStandardOutput();
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 SymbianAdapter::write(const char *data)
|
qint64 TrkGdbAdapter::write(const char *data)
|
||||||
{
|
{
|
||||||
return m_gdbProc.write(data);
|
return m_gdbProc.write(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::setWorkingDirectory(const QString &dir)
|
void TrkGdbAdapter::setWorkingDirectory(const QString &dir)
|
||||||
{
|
{
|
||||||
m_gdbProc.setWorkingDirectory(dir);
|
m_gdbProc.setWorkingDirectory(dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::setEnvironment(const QStringList &env)
|
void TrkGdbAdapter::setEnvironment(const QStringList &env)
|
||||||
{
|
{
|
||||||
m_gdbProc.setEnvironment(env);
|
m_gdbProc.setEnvironment(env);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SymbianAdapter::attach(GdbEngine *engine) const
|
void TrkGdbAdapter::attach(GdbEngine *engine) const
|
||||||
{
|
{
|
||||||
#ifdef STANDALONE_RUNNER
|
#ifdef STANDALONE_RUNNER
|
||||||
#else
|
#else
|
||||||
@@ -27,12 +27,12 @@
|
|||||||
**
|
**
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
#ifndef DEBUGGER_SYMBIANADAPTER_H
|
#ifndef DEBUGGER_TRKGDBADAPTER_H
|
||||||
#define DEBUGGER_SYMBIANADAPTER_H
|
#define DEBUGGER_TRKGDBADAPTER_H
|
||||||
|
|
||||||
#include "trkutils.h"
|
#include "trkutils.h"
|
||||||
#include "trkclient.h"
|
#include "trkclient.h"
|
||||||
#include "gdbprocessbase.h"
|
#include "abstractgdbadapter.h"
|
||||||
|
|
||||||
#include <QtCore/QDebug>
|
#include <QtCore/QDebug>
|
||||||
#include <QtCore/QDir>
|
#include <QtCore/QDir>
|
||||||
@@ -69,11 +69,11 @@ struct GdbResult
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// SymbianAdapter
|
// TrkGdbAdapter
|
||||||
//
|
//
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
class SymbianAdapter : public GdbProcessBase
|
class TrkGdbAdapter : public AbstractGdbAdapter
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@@ -82,8 +82,8 @@ public:
|
|||||||
typedef Callback<const TrkResult &> TrkCallback;
|
typedef Callback<const TrkResult &> TrkCallback;
|
||||||
typedef Callback<const GdbResult &> GdbCallback;
|
typedef Callback<const GdbResult &> GdbCallback;
|
||||||
|
|
||||||
SymbianAdapter();
|
TrkGdbAdapter();
|
||||||
~SymbianAdapter();
|
~TrkGdbAdapter();
|
||||||
void setGdbServerName(const QString &name);
|
void setGdbServerName(const QString &name);
|
||||||
QString gdbServerName() const { return m_gdbServerName; }
|
QString gdbServerName() const { return m_gdbServerName; }
|
||||||
QString gdbServerIP() const;
|
QString gdbServerIP() const;
|
||||||
@@ -242,4 +242,4 @@ public:
|
|||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
} // namespace Debugger
|
} // namespace Debugger
|
||||||
|
|
||||||
#endif // DEBUGGER_SYMBIANADAPTER_H
|
#endif // DEBUGGER_TRKGDBADAPTER_H
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
**
|
**
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
#include "symbianadapter.h"
|
#include "trkgdbadapter.h"
|
||||||
|
|
||||||
#include <QtCore/QDebug>
|
#include <QtCore/QDebug>
|
||||||
|
|
||||||
@@ -97,7 +97,7 @@ class RunnerGui : public QMainWindow
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
RunnerGui(SymbianAdapter *adapter);
|
RunnerGui(TrkGdbAdapter *adapter);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void executeStepICommand() { executeCommand("-exec-step-instruction"); }
|
void executeStepICommand() { executeCommand("-exec-step-instruction"); }
|
||||||
@@ -118,7 +118,7 @@ private:
|
|||||||
void executeCommand(const QString &cmd) { m_adapter->executeCommand(cmd); }
|
void executeCommand(const QString &cmd) { m_adapter->executeCommand(cmd); }
|
||||||
void connectAction(QAction *&, QString name, const char *slot);
|
void connectAction(QAction *&, QString name, const char *slot);
|
||||||
|
|
||||||
SymbianAdapter *m_adapter;
|
TrkGdbAdapter *m_adapter;
|
||||||
TextEdit m_textEdit;
|
TextEdit m_textEdit;
|
||||||
QToolBar m_toolBar;
|
QToolBar m_toolBar;
|
||||||
QAction *m_stopAction;
|
QAction *m_stopAction;
|
||||||
@@ -130,7 +130,7 @@ private:
|
|||||||
QAction *m_continueAction;
|
QAction *m_continueAction;
|
||||||
};
|
};
|
||||||
|
|
||||||
RunnerGui::RunnerGui(SymbianAdapter *adapter)
|
RunnerGui::RunnerGui(TrkGdbAdapter *adapter)
|
||||||
: m_adapter(adapter)
|
: m_adapter(adapter)
|
||||||
{
|
{
|
||||||
resize(1200, 1000);
|
resize(1200, 1000);
|
||||||
@@ -224,7 +224,7 @@ void RunnerGui::started()
|
|||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
QApplication app(argc, argv);
|
QApplication app(argc, argv);
|
||||||
SymbianAdapter adapter;
|
TrkGdbAdapter adapter;
|
||||||
adapter.setVerbose(2);
|
adapter.setVerbose(2);
|
||||||
RunnerGui gui(&adapter);
|
RunnerGui gui(&adapter);
|
||||||
gui.show();
|
gui.show();
|
||||||
|
|||||||
@@ -11,13 +11,13 @@ QT += network
|
|||||||
win32:CONFIG+=console
|
win32:CONFIG+=console
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
$$DEBUGGERHOME/../gdb/gdbprocessbase.h \
|
$$DEBUGGERHOME/../gdb/abstractgdbadapter.h \
|
||||||
$$DEBUGGERHOME/trkutils.h \
|
$$DEBUGGERHOME/trkutils.h \
|
||||||
$$DEBUGGERHOME/trkclient.h \
|
$$DEBUGGERHOME/trkclient.h \
|
||||||
$$DEBUGGERHOME/symbianadapter.h \
|
$$DEBUGGERHOME/trkgdbadapter.h \
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
$$DEBUGGERHOME/trkutils.cpp \
|
$$DEBUGGERHOME/trkutils.cpp \
|
||||||
$$DEBUGGERHOME/trkclient.cpp \
|
$$DEBUGGERHOME/trkclient.cpp \
|
||||||
$$DEBUGGERHOME/symbianadapter.cpp \
|
$$DEBUGGERHOME/trkgdbadapter.cpp \
|
||||||
$$PWD/runner.cpp \
|
$$PWD/runner.cpp \
|
||||||
|
|||||||
Reference in New Issue
Block a user