debugger: code cosmetics

This commit is contained in:
hjk
2010-11-26 10:10:00 +01:00
parent 75ee5bce8c
commit 8baa54e701
12 changed files with 299 additions and 272 deletions
+2 -2
View File
@@ -219,7 +219,7 @@ enum DebuggerEngineType
TcfEngineType = 0x10,
QmlEngineType = 0x20,
QmlCppEngineType = 0x40,
LLDBEngineType = 0x80,
LldbEngineType = 0x80,
AllEngineTypes = GdbEngineType
| ScriptEngineType
| CdbEngineType
@@ -227,7 +227,7 @@ enum DebuggerEngineType
| TcfEngineType
| QmlEngineType
| QmlCppEngineType
| LLDBEngineType
| LldbEngineType
};
enum DebuggerLanguage
+196 -160
View File
@@ -75,7 +75,7 @@ DebuggerEngine *createPdbEngine(const DebuggerStartParameters &);
DebuggerEngine *createTcfEngine(const DebuggerStartParameters &);
DebuggerEngine *createQmlEngine(const DebuggerStartParameters &);
DebuggerEngine *createQmlCppEngine(const DebuggerStartParameters &);
DebuggerEngine *createLLDBEngine(const DebuggerStartParameters &);
DebuggerEngine *createLldbEngine(const DebuggerStartParameters &);
extern QString msgNoBinaryForToolChain(int tc);
@@ -95,6 +95,8 @@ bool checkCdbConfiguration(int, QString *, QString *) { return false; }
#endif
} // namespace Internal
namespace Cdb {
DebuggerEngine *createCdbEngine(const DebuggerStartParameters &, QString *errorMessage);
bool isCdbEngineEnabled(); // Check the configuration page
@@ -243,16 +245,28 @@ QWidget *DebuggerRunControlFactory::createConfigurationWidget
////////////////////////////////////////////////////////////////////////
//
// DebuggerRunControl
// DebuggerRunControlPrivate
//
////////////////////////////////////////////////////////////////////////
struct DebuggerRunnerPrivate {
explicit DebuggerRunnerPrivate(RunConfiguration *runConfiguration,
unsigned enabledEngines);
class DebuggerRunControlPrivate
{
public:
DebuggerRunControlPrivate(DebuggerRunControl *parent,
RunConfiguration *runConfiguration, unsigned enabledEngines);
unsigned enabledEngines() const;
DebuggerEngineType engineForExecutable(unsigned enabledEngineTypes,
const QString &executable);
DebuggerEngineType engineForMode(unsigned enabledEngineTypes,
DebuggerStartMode mode);
void initGdbEngine(GdbEngine *engine);
GdbEngine *gdbEngine() const;
AbstractGdbAdapter *gdbAdapter() const;
public:
DebuggerRunControl *q;
DebuggerEngine *m_engine;
const QWeakPointer<RunConfiguration> m_myRunConfiguration;
bool m_running;
@@ -261,33 +275,150 @@ struct DebuggerRunnerPrivate {
QString m_settingsIdHint;
};
unsigned DebuggerRunnerPrivate::enabledEngines() const
unsigned DebuggerRunControlPrivate::enabledEngines() const
{
unsigned rc = m_cmdLineEnabledEngines;
#ifdef CDB_ENABLED
if (!Internal::isCdbEngineEnabled() && !Cdb::isCdbEngineEnabled())
if (!isCdbEngineEnabled() && !Cdb::isCdbEngineEnabled())
rc &= ~CdbEngineType;
#endif
return rc;
}
DebuggerRunnerPrivate::DebuggerRunnerPrivate(RunConfiguration *runConfiguration,
unsigned enabledEngines) :
m_engine(0)
DebuggerRunControlPrivate::DebuggerRunControlPrivate(DebuggerRunControl *parent,
RunConfiguration *runConfiguration, unsigned enabledEngines)
: q(parent)
, m_engine(0)
, m_myRunConfiguration(runConfiguration)
, m_running(false)
, m_cmdLineEnabledEngines(enabledEngines)
{
}
// Figure out the debugger type of an executable. Analyze executable
// unless the toolchain provides a hint.
DebuggerEngineType DebuggerRunControlPrivate::engineForExecutable
(unsigned enabledEngineTypes, const QString &executable)
{
/*if (executable.endsWith(_("qmlviewer"))) {
if (enabledEngineTypes & QmlEngineType)
return QmlEngineType;
d->m_errorMessage = msgEngineNotAvailable("Qml Engine");
}*/
if (executable.endsWith(_(".js"))) {
if (enabledEngineTypes & ScriptEngineType)
return ScriptEngineType;
m_errorMessage = msgEngineNotAvailable("Script Engine");
}
if (executable.endsWith(_(".py"))) {
if (enabledEngineTypes & PdbEngineType)
return PdbEngineType;
m_errorMessage = msgEngineNotAvailable("Pdb Engine");
}
#ifdef Q_OS_WIN
// A remote executable?
if (!executable.endsWith(_(".exe")))
return GdbEngineType;
// If a file has PDB files, it has been compiled by VS.
QStringList pdbFiles;
if (!getPDBFiles(executable, &pdbFiles, &m_errorMessage)) {
qWarning("Cannot determine type of executable %s: %s",
qPrintable(executable), qPrintable(m_errorMessage));
return NoEngineType;
}
if (pdbFiles.empty())
return GdbEngineType;
// We need the CDB debugger in order to be able to debug VS
// executables
if (checkDebugConfiguration(ProjectExplorer::ToolChain_MSVC, &m_errorMessage, 0, &m_settingsIdHint)) {
if (enabledEngineTypes & CdbEngineType)
return CdbEngineType;
m_errorMessage = msgEngineNotAvailable("Cdb Engine");
return NoEngineType;
}
#else
if (enabledEngineTypes & GdbEngineType)
return GdbEngineType;
m_errorMessage = msgEngineNotAvailable("Gdb Engine");
#endif
return NoEngineType;
}
// Debugger type for mode.
DebuggerEngineType DebuggerRunControlPrivate::engineForMode
(unsigned enabledEngineTypes, DebuggerStartMode startMode)
{
if (startMode == AttachTcf)
return TcfEngineType;
#ifdef Q_OS_WIN
// Preferably Windows debugger for attaching locally.
if (startMode != AttachToRemote && (enabledEngineTypes & CdbEngineType))
return CdbEngineType;
if (startMode == AttachCrashedExternal) {
m_errorMessage = tr("There is no debugging engine available for post-mortem debugging.");
return NoEngineType;
}
return GdbEngineType;
#else
Q_UNUSED(startMode)
Q_UNUSED(enabledEngineTypes)
// >m_errorMessage = msgEngineNotAvailable("Gdb Engine");
return GdbEngineType;
#endif
}
void DebuggerRunControlPrivate::initGdbEngine(GdbEngine *engine)
{
QTC_ASSERT(engine, return)
// Forward adapter signals.
AbstractGdbAdapter *adapter = engine->gdbAdapter();
RemotePlainGdbAdapter *rpga = qobject_cast<RemotePlainGdbAdapter *>(adapter);
RemoteGdbServerAdapter *rgsa = qobject_cast<RemoteGdbServerAdapter *>(adapter);
if (rpga)
q->connect(rpga, SIGNAL(requestSetup()), SIGNAL(engineRequestSetup()));
else if (rgsa)
q->connect(rgsa, SIGNAL(requestSetup()), SIGNAL(engineRequestSetup()));
}
GdbEngine *DebuggerRunControlPrivate::gdbEngine() const
{
QTC_ASSERT(m_engine, return 0);
if (GdbEngine *gdbEngine = qobject_cast<GdbEngine *>(m_engine))
return gdbEngine;
if (QmlCppEngine *qmlEngine = qobject_cast<QmlCppEngine *>(m_engine))
if (GdbEngine *embeddedGdbEngine = qobject_cast<GdbEngine *>(qmlEngine->cppEngine()))
return embeddedGdbEngine;
return 0;
}
AbstractGdbAdapter *DebuggerRunControlPrivate::gdbAdapter() const
{
GdbEngine *engine = gdbEngine();
QTC_ASSERT(engine, return 0)
return engine->gdbAdapter();
}
////////////////////////////////////////////////////////////////////////
//
// DebuggerRunControl
//
////////////////////////////////////////////////////////////////////////
DebuggerRunControl::DebuggerRunControl(RunConfiguration *runConfiguration,
unsigned enabledEngines, const DebuggerStartParameters &sp)
: RunControl(runConfiguration, Constants::DEBUGMODE),
d(new DebuggerRunnerPrivate(runConfiguration, enabledEngines))
d(new DebuggerRunControlPrivate(this, runConfiguration, enabledEngines))
{
connect(this, SIGNAL(finished()), this, SLOT(handleFinished()));
DebuggerStartParameters startParams = sp;
createEngine(startParams);
connect(this, SIGNAL(finished()), SLOT(handleFinished()));
createEngine(sp);
}
DebuggerRunControl::~DebuggerRunControl()
@@ -334,84 +465,6 @@ static DebuggerEngineType engineForToolChain(int toolChainType)
return NoEngineType;
}
// Figure out the debugger type of an executable. Analyze executable
// unless the toolchain provides a hint.
DebuggerEngineType DebuggerRunControl::engineForExecutable(unsigned enabledEngineTypes, const QString &executable)
{
/*if (executable.endsWith(_("qmlviewer"))) {
if (enabledEngineTypes & QmlEngineType)
return QmlEngineType;
d->m_errorMessage = msgEngineNotAvailable("Qml Engine");
}*/
if (executable.endsWith(_(".js"))) {
if (enabledEngineTypes & ScriptEngineType)
return ScriptEngineType;
d->m_errorMessage = msgEngineNotAvailable("Script Engine");
}
if (executable.endsWith(_(".py"))) {
if (enabledEngineTypes & PdbEngineType)
return PdbEngineType;
d->m_errorMessage = msgEngineNotAvailable("Pdb Engine");
}
#ifdef Q_OS_WIN
// A remote executable?
if (!executable.endsWith(_(".exe")))
return GdbEngineType;
// If a file has PDB files, it has been compiled by VS.
QStringList pdbFiles;
if (!getPDBFiles(executable, &pdbFiles, &d->m_errorMessage)) {
qWarning("Cannot determine type of executable %s: %s",
qPrintable(executable), qPrintable(d->m_errorMessage));
return NoEngineType;
}
if (pdbFiles.empty())
return GdbEngineType;
// We need the CDB debugger in order to be able to debug VS
// executables
if (checkDebugConfiguration(ProjectExplorer::ToolChain_MSVC, &d->m_errorMessage, 0, &d->m_settingsIdHint)) {
if (enabledEngineTypes & CdbEngineType)
return CdbEngineType;
d->m_errorMessage = msgEngineNotAvailable("Cdb Engine");
return NoEngineType;
}
#else
if (enabledEngineTypes & GdbEngineType)
return GdbEngineType;
d->m_errorMessage = msgEngineNotAvailable("Gdb Engine");
#endif
return NoEngineType;
}
// Debugger type for mode.
DebuggerEngineType DebuggerRunControl::engineForMode(unsigned enabledEngineTypes, DebuggerStartMode startMode)
{
if (startMode == AttachTcf)
return TcfEngineType;
#ifdef Q_OS_WIN
// Preferably Windows debugger for attaching locally.
if (startMode != AttachToRemote && (enabledEngineTypes & CdbEngineType))
return CdbEngineType;
if (startMode == AttachCrashedExternal) {
d->m_errorMessage = tr("There is no debugging engine available for post-mortem debugging.");
return NoEngineType;
}
return GdbEngineType;
#else
Q_UNUSED(startMode)
Q_UNUSED(enabledEngineTypes)
// d->m_errorMessage = msgEngineNotAvailable("Gdb Engine");
return GdbEngineType;
#endif
}
void DebuggerRunControl::createEngine(const DebuggerStartParameters &startParams)
{
DebuggerStartParameters sp = startParams;
@@ -437,15 +490,15 @@ void DebuggerRunControl::createEngine(const DebuggerStartParameters &startParams
engineType = GdbEngineType;
if (sp.processArgs.contains( _("@lldb@")))
engineType = LLDBEngineType;
engineType = LldbEngineType;
if (engineType == NoEngineType
&& sp.startMode != AttachToRemote
&& !sp.executable.isEmpty())
engineType = engineForExecutable(enabledEngineTypes, sp.executable);
engineType = d->engineForExecutable(enabledEngineTypes, sp.executable);
if (engineType == NoEngineType)
engineType = engineForMode(enabledEngineTypes, sp.startMode);
engineType = d->engineForMode(enabledEngineTypes, sp.startMode);
if ((engineType != QmlEngineType && engineType != NoEngineType)
&& (activeLangs & QmlLanguage)) {
@@ -462,10 +515,10 @@ void DebuggerRunControl::createEngine(const DebuggerStartParameters &startParams
switch (engineType) {
case GdbEngineType:
d->m_engine = createGdbEngine(sp);
initGdbEngine(qobject_cast<Internal::GdbEngine *>(d->m_engine));
d->initGdbEngine(qobject_cast<GdbEngine *>(d->m_engine));
break;
case ScriptEngineType:
d->m_engine = Internal::createScriptEngine(sp);
d->m_engine = createScriptEngine(sp);
break;
case CdbEngineType:
// Try new engine, fall back to old.
@@ -476,24 +529,24 @@ void DebuggerRunControl::createEngine(const DebuggerStartParameters &startParams
}
break;
case PdbEngineType:
d->m_engine = Internal::createPdbEngine(sp);
d->m_engine = createPdbEngine(sp);
break;
case TcfEngineType:
d->m_engine = Internal::createTcfEngine(sp);
d->m_engine = createTcfEngine(sp);
break;
case QmlEngineType:
d->m_engine = Internal::createQmlEngine(sp);
d->m_engine = createQmlEngine(sp);
connect(qobject_cast<QmlEngine *>(d->m_engine),
SIGNAL(remoteStartupRequested()), this,
SIGNAL(remoteStartupRequested()),
SIGNAL(engineRequestSetup()));
break;
case QmlCppEngineType:
d->m_engine = Internal::createQmlCppEngine(sp);
if (Internal::GdbEngine *embeddedGdbEngine = gdbEngine())
initGdbEngine(embeddedGdbEngine);
d->m_engine = createQmlCppEngine(sp);
if (GdbEngine *embeddedGdbEngine = d->gdbEngine())
d->initGdbEngine(embeddedGdbEngine);
break;
case LLDBEngineType:
d->m_engine = Internal::createLLDBEngine(sp);
case LldbEngineType:
d->m_engine = createLldbEngine(sp);
case NoEngineType:
case AllEngineTypes:
break;
@@ -511,21 +564,6 @@ void DebuggerRunControl::createEngine(const DebuggerStartParameters &startParams
}
}
void DebuggerRunControl::initGdbEngine(Internal::GdbEngine *engine)
{
QTC_ASSERT(engine, return)
// Forward adapter signals.
Internal::AbstractGdbAdapter *adapter = engine->gdbAdapter();
if (RemotePlainGdbAdapter *rpga = qobject_cast<RemotePlainGdbAdapter *>(adapter)) {
connect(rpga, SIGNAL(requestSetup()), this,
SIGNAL(engineRequestSetup()));
} else if (RemoteGdbServerAdapter *rgsa = qobject_cast<RemoteGdbServerAdapter *>(adapter)) {
connect(rgsa, SIGNAL(requestSetup()),
this, SIGNAL(engineRequestSetup()));
}
}
QString DebuggerRunControl::displayName() const
{
QTC_ASSERT(d->m_engine, return QString());
@@ -703,56 +741,54 @@ DebuggerEngine *DebuggerRunControl::engine()
return d->m_engine;
}
Internal::GdbEngine *DebuggerRunControl::gdbEngine() const
{
QTC_ASSERT(d->m_engine, return 0);
if (GdbEngine *gdbEngine = qobject_cast<GdbEngine *>(d->m_engine))
return gdbEngine;
if (QmlCppEngine * const qmlEngine = qobject_cast<QmlCppEngine *>(d->m_engine))
if (Internal::GdbEngine *embeddedGdbEngine = qobject_cast<GdbEngine *>(qmlEngine->cppEngine()))
return embeddedGdbEngine;
return 0;
}
Internal::AbstractGdbAdapter *DebuggerRunControl::gdbAdapter() const
{
GdbEngine *engine = gdbEngine();
QTC_ASSERT(engine, return 0)
return engine->gdbAdapter();
}
void DebuggerRunControl::handleRemoteSetupDone(int gdbServerPort, int qmlPort)
{
// FIXME: Use virtual functions?
if (QmlEngine *qmlEngine = qobject_cast<QmlEngine *>(d->m_engine)) {
qmlEngine->handleRemoteSetupDone(qmlPort);
} else if (Internal::AbstractGdbAdapter *adapter = gdbAdapter()) {
if (RemotePlainGdbAdapter *rpga = qobject_cast<RemotePlainGdbAdapter *>(adapter)) {
rpga->handleSetupDone(qmlPort);
} else if (RemoteGdbServerAdapter *rgsa = qobject_cast<RemoteGdbServerAdapter *>(adapter)) {
rgsa->handleSetupDone(gdbServerPort, qmlPort);
} else {
QTC_ASSERT(false, /* */ );
}
} else {
QTC_ASSERT(false, /* */ );
return;
}
AbstractGdbAdapter *adapter = d->gdbAdapter();
QTC_ASSERT(adapter, return);
RemotePlainGdbAdapter *rpga = qobject_cast<RemotePlainGdbAdapter *>(adapter);
if (rpga) {
rpga->handleSetupDone(qmlPort);
return;
}
RemoteGdbServerAdapter *rgsa = qobject_cast<RemoteGdbServerAdapter *>(adapter);
if (rgsa) {
rgsa->handleSetupDone(gdbServerPort, qmlPort);
return;
}
QTC_ASSERT(false, /**/);
}
void DebuggerRunControl::handleRemoteSetupFailed(const QString &message)
{
// FIXME: Use virtual functions?
if (QmlEngine *qmlEngine = qobject_cast<QmlEngine *>(d->m_engine)) {
qmlEngine->handleRemoteSetupFailed(message);
} else if (Internal::AbstractGdbAdapter *adapter = gdbAdapter()) {
if (RemotePlainGdbAdapter *rpga = qobject_cast<RemotePlainGdbAdapter *>(adapter)) {
rpga->handleSetupFailed(message);
} else if (RemoteGdbServerAdapter *rgsa = qobject_cast<RemoteGdbServerAdapter *>(adapter)) {
rgsa->handleSetupFailed(message);
} else {
QTC_ASSERT(false, /* */ );
}
} else {
QTC_ASSERT(false, /* */ );
return;
}
AbstractGdbAdapter *adapter = d->gdbAdapter();
QTC_ASSERT(adapter, return);
RemotePlainGdbAdapter *rpga = qobject_cast<RemotePlainGdbAdapter *>(adapter);
if (rpga) {
rpga->handleSetupFailed(message);
return;
}
RemoteGdbServerAdapter *rgsa = qobject_cast<RemoteGdbServerAdapter *>(adapter);
if (rgsa) {
rgsa->handleSetupFailed(message);
return;
}
QTC_ASSERT(false, /**/);
}
void DebuggerRunControl::emitAddToOutputWindow(const QString &line, bool onStdErr)
+2 -11
View File
@@ -44,9 +44,8 @@ class Environment;
namespace Debugger {
class DebuggerEngine;
class DebuggerRunControl;
class QmlEngine;
class DebuggerRunControlPrivate;
class DebuggerStartParameters;
struct DebuggerRunnerPrivate;
namespace Internal {
class GdbEngine;
@@ -101,9 +100,7 @@ public:
QString displayName() const;
void createEngine(const DebuggerStartParameters &startParameters);
void setCustomEnvironment(Utils::Environment env);
void startFailed();
void debuggingFinished();
RunConfiguration *runConfiguration() const;
@@ -136,13 +133,7 @@ protected:
const DebuggerStartParameters &startParameters() const;
private:
DebuggerEngineType engineForExecutable(unsigned enabledEngineTypes, const QString &executable);
DebuggerEngineType engineForMode(unsigned enabledEngineTypes, DebuggerStartMode mode);
void initGdbEngine(Internal::GdbEngine *engine);
Internal::GdbEngine *gdbEngine() const;
Internal::AbstractGdbAdapter *gdbAdapter() const;
QScopedPointer<DebuggerRunnerPrivate> d;
QScopedPointer<DebuggerRunControlPrivate> d;
};
} // namespace Debugger
@@ -68,7 +68,7 @@
namespace Debugger {
namespace Internal {
void LLDBEventListener::listen(lldb::SBListener *listener)
void LldbEventListener::listen(lldb::SBListener *listener)
{
while (true) {
lldb::SBEvent event;
@@ -77,11 +77,11 @@ void LLDBEventListener::listen(lldb::SBListener *listener)
}
}
LLDBEngineGuest::LLDBEngineGuest()
LldbEngineGuest::LldbEngineGuest()
: IPCEngineGuest()
, m_runLock (QMutex::Recursive)
, m_running (false)
, m_worker (new LLDBEventListener)
, m_worker (new LldbEventListener)
, m_lldb (new lldb::SBDebugger)
, m_target (new lldb::SBTarget)
, m_process (new lldb::SBProcess)
@@ -101,7 +101,7 @@ LLDBEngineGuest::LLDBEngineGuest()
setObjectName(QLatin1String("LLDBEngineGuest"));
}
LLDBEngineGuest::~LLDBEngineGuest()
LldbEngineGuest::~LldbEngineGuest()
{
delete m_lldb;
delete m_target;
@@ -109,7 +109,7 @@ LLDBEngineGuest::~LLDBEngineGuest()
delete m_listener;
}
void LLDBEngineGuest::setupEngine()
void LldbEngineGuest::setupEngine()
{
DEBUG_FUNC_ENTER;
@@ -124,7 +124,7 @@ void LLDBEngineGuest::setupEngine()
}
void LLDBEngineGuest::setupInferior(const QString &executable,
void LldbEngineGuest::setupInferior(const QString &executable,
const QStringList &args, const QStringList &env)
{
DEBUG_FUNC_ENTER;
@@ -146,17 +146,17 @@ void LLDBEngineGuest::setupInferior(const QString &executable,
notifyInferiorSetupOk();
}
void LLDBEngineGuest::runEngine()
void LldbEngineGuest::runEngine()
{
DEBUG_FUNC_ENTER;
const char **argp = new const char * [m_arguments.count() + 1];
const char **argp = new const char *[m_arguments.count() + 1];
argp[m_arguments.count()] = 0;
for (int i = 0; i < m_arguments.count(); i++) {
argp[i] = m_arguments[i].data();
}
const char **envp = new const char * [m_environment.count() + 1];
const char **envp = new const char *[m_environment.count() + 1];
envp[m_environment.count()] = 0;
for (int i = 0; i < m_environment.count(); i++) {
envp[i] = m_environment[i].data();
@@ -178,13 +178,13 @@ void LLDBEngineGuest::runEngine()
Q_ARG(lldb::SBListener *, m_listener));
}
void LLDBEngineGuest::shutdownInferior()
void LldbEngineGuest::shutdownInferior()
{
DEBUG_FUNC_ENTER;
m_process->Kill();
}
void LLDBEngineGuest::shutdownEngine()
void LldbEngineGuest::shutdownEngine()
{
DEBUG_FUNC_ENTER;
m_currentFrame = lldb::SBFrame();
@@ -202,12 +202,12 @@ void LLDBEngineGuest::shutdownEngine()
notifyEngineShutdownOk();
}
void LLDBEngineGuest::detachDebugger()
void LldbEngineGuest::detachDebugger()
{
DEBUG_FUNC_ENTER;
}
void LLDBEngineGuest::executeStep()
void LldbEngineGuest::executeStep()
{
DEBUG_FUNC_ENTER;
@@ -216,7 +216,7 @@ void LLDBEngineGuest::executeStep()
m_currentThread.StepInto();
}
void LLDBEngineGuest::executeStepOut()
void LldbEngineGuest::executeStepOut()
{
DEBUG_FUNC_ENTER;
@@ -227,7 +227,7 @@ void LLDBEngineGuest::executeStepOut()
notifyInferiorRunOk();
}
void LLDBEngineGuest::executeNext()
void LldbEngineGuest::executeNext()
{
DEBUG_FUNC_ENTER;
@@ -238,7 +238,7 @@ void LLDBEngineGuest::executeNext()
notifyInferiorRunOk();
}
void LLDBEngineGuest::executeStepI()
void LldbEngineGuest::executeStepI()
{
DEBUG_FUNC_ENTER;
@@ -247,7 +247,7 @@ void LLDBEngineGuest::executeStepI()
m_currentThread.StepInstruction(false);
}
void LLDBEngineGuest::executeNextI()
void LldbEngineGuest::executeNextI()
{
DEBUG_FUNC_ENTER;
@@ -258,7 +258,7 @@ void LLDBEngineGuest::executeNextI()
notifyInferiorRunOk();
}
void LLDBEngineGuest::continueInferior()
void LldbEngineGuest::continueInferior()
{
DEBUG_FUNC_ENTER;
@@ -266,7 +266,7 @@ void LLDBEngineGuest::continueInferior()
m_process->Continue();
showStatusMessage(QLatin1String("resuming inferior"));
}
void LLDBEngineGuest::interruptInferior()
void LldbEngineGuest::interruptInferior()
{
DEBUG_FUNC_ENTER;
@@ -276,7 +276,7 @@ void LLDBEngineGuest::interruptInferior()
updateThreads();
}
void LLDBEngineGuest::executeRunToLine(const QString &fileName, int lineNumber)
void LldbEngineGuest::executeRunToLine(const QString &fileName, int lineNumber)
{
DEBUG_FUNC_ENTER;
@@ -285,14 +285,14 @@ void LLDBEngineGuest::executeRunToLine(const QString &fileName, int lineNumber)
Q_UNUSED(lineNumber);
}
void LLDBEngineGuest::executeRunToFunction(const QString &functionName)
void LldbEngineGuest::executeRunToFunction(const QString &functionName)
{
DEBUG_FUNC_ENTER;
// TODO
Q_UNUSED(functionName);
}
void LLDBEngineGuest::executeJumpToLine(const QString &fileName, int lineNumber)
void LldbEngineGuest::executeJumpToLine(const QString &fileName, int lineNumber)
{
DEBUG_FUNC_ENTER;
@@ -301,7 +301,7 @@ void LLDBEngineGuest::executeJumpToLine(const QString &fileName, int lineNumber)
Q_UNUSED(lineNumber);
}
void LLDBEngineGuest::activateFrame(qint64 token)
void LldbEngineGuest::activateFrame(qint64 token)
{
DEBUG_FUNC_ENTER;
SYNC_INFERIOR;
@@ -324,7 +324,7 @@ void LLDBEngineGuest::activateFrame(qint64 token)
updateWatchData(true, wd);
}
void LLDBEngineGuest::requestUpdateWatchData(const Internal::WatchData &data,
void LldbEngineGuest::requestUpdateWatchData(const Internal::WatchData &data,
const Internal::WatchUpdateFlags &)
{
DEBUG_FUNC_ENTER;
@@ -339,7 +339,7 @@ void LLDBEngineGuest::requestUpdateWatchData(const Internal::WatchData &data,
updateWatchData(false, wd);
}
void LLDBEngineGuest::getWatchDataR(lldb::SBValue v, int level,
void LldbEngineGuest::getWatchDataR(lldb::SBValue v, int level,
const QByteArray &p_iname, QList<WatchData> &wd)
{
QByteArray iname = p_iname + "." + QByteArray(v.GetName());
@@ -366,7 +366,7 @@ void LLDBEngineGuest::getWatchDataR(lldb::SBValue v, int level,
}
}
void LLDBEngineGuest::disassemble(quint64 pc)
void LldbEngineGuest::disassemble(quint64 pc)
{
DEBUG_FUNC_ENTER;
SYNC_INFERIOR_OR(return);
@@ -386,7 +386,7 @@ void LLDBEngineGuest::disassemble(quint64 pc)
}
}
void LLDBEngineGuest::addBreakpoint(BreakpointId id,
void LldbEngineGuest::addBreakpoint(BreakpointId id,
const Internal::BreakpointParameters &bp_)
{
DEBUG_FUNC_ENTER;
@@ -422,7 +422,7 @@ void LLDBEngineGuest::addBreakpoint(BreakpointId id,
}
}
void LLDBEngineGuest::removeBreakpoint(BreakpointId id)
void LldbEngineGuest::removeBreakpoint(BreakpointId id)
{
DEBUG_FUNC_ENTER;
SYNC_INFERIOR_OR(notifyRemoveBreakpointFailed(id); return);
@@ -432,7 +432,7 @@ void LLDBEngineGuest::removeBreakpoint(BreakpointId id)
notifyRemoveBreakpointOk(id);
}
void LLDBEngineGuest::changeBreakpoint(BreakpointId id,
void LldbEngineGuest::changeBreakpoint(BreakpointId id,
const Internal::BreakpointParameters &bp)
{
DEBUG_FUNC_ENTER;
@@ -442,7 +442,7 @@ void LLDBEngineGuest::changeBreakpoint(BreakpointId id,
Q_UNUSED(bp);
}
void LLDBEngineGuest::selectThread(qint64 token)
void LldbEngineGuest::selectThread(qint64 token)
{
DEBUG_FUNC_ENTER;
SYNC_INFERIOR_OR(return);
@@ -535,7 +535,7 @@ void LLDBEngineGuest::selectThread(qint64 token)
}
}
void LLDBEngineGuest::updateThreads()
void LldbEngineGuest::updateThreads()
{
DEBUG_FUNC_ENTER;
SYNC_INFERIOR_OR(return);
@@ -646,7 +646,7 @@ void LLDBEngineGuest::updateThreads()
}
}
void LLDBEngineGuest::lldbEvent(lldb::SBEvent *ev)
void LldbEngineGuest::lldbEvent(lldb::SBEvent *ev)
{
qDebug() << "lldbevent" << ev->GetType() <<
ev->GetDataFlavor() << m_process->GetState() << (int)state();
@@ -50,7 +50,7 @@ Q_DECLARE_METATYPE (lldb::SBEvent *)
namespace Debugger {
namespace Internal {
class LLDBEventListener : public QObject
class LldbEventListener : public QObject
{
Q_OBJECT
public slots:
@@ -63,13 +63,13 @@ signals:
};
class LLDBEngineGuest : public IPCEngineGuest
class LldbEngineGuest : public IPCEngineGuest
{
Q_OBJECT
public:
explicit LLDBEngineGuest();
~LLDBEngineGuest();
explicit LldbEngineGuest();
~LldbEngineGuest();
void setupEngine();
void setupInferior(const QString &executable, const QStringList &arguments,
@@ -95,9 +95,8 @@ public:
void removeBreakpoint(BreakpointId id);
void changeBreakpoint(BreakpointId id, const BreakpointParameters &bp);
void requestUpdateWatchData(const Internal::WatchData &data,
const Internal::WatchUpdateFlags & flags = Internal::WatchUpdateFlags());
void requestUpdateWatchData(const WatchData &data,
const WatchUpdateFlags &flags);
private:
QMutex m_runLock;
@@ -106,7 +105,7 @@ private:
QList<QByteArray> m_arguments;
QList<QByteArray> m_environment;
QThread m_wThread;
LLDBEventListener *m_worker;
LldbEventListener *m_worker;
lldb::SBDebugger *m_lldb;
lldb::SBTarget *m_target;
lldb::SBProcess *m_process;
@@ -130,8 +129,6 @@ private slots:
void lldbEvent(lldb::SBEvent *ev);
};
} // namespace Internal
} // namespace Debugger
+1 -1
View File
@@ -16,7 +16,7 @@ int main(int argc, char **argv)
QCoreApplication app(argc, argv);
Debugger::Internal::LLDBEngineGuest lldb;
Debugger::Internal::LldbEngineGuest lldb;
QLocalSocket s;
if (argc > 1) {
+11 -11
View File
@@ -62,23 +62,23 @@ IPCEngineGuest::~IPCEngineGuest()
{
}
void IPCEngineGuest::setLocalHost(IPCEngineHost * h)
void IPCEngineGuest::setLocalHost(IPCEngineHost *host)
{
m_local_host = h;
m_local_host = host;
}
void IPCEngineGuest::setHostDevice(QIODevice * d)
void IPCEngineGuest::setHostDevice(QIODevice *device)
{
if (m_device) {
disconnect(m_device, SIGNAL(readyRead()), this, SLOT(readyRead()));
disconnect(m_device, SIGNAL(readyRead()), SLOT(readyRead()));
delete m_device;
}
m_device = d;
m_device = device;
if (m_device)
connect(m_device, SIGNAL(readyRead()), this, SLOT(readyRead()));
connect(m_device, SIGNAL(readyRead()), SLOT(readyRead()));
}
void IPCEngineGuest::rpcCall(IPCEngineGuest::Function f, QByteArray payload )
void IPCEngineGuest::rpcCall(Function f, QByteArray payload)
{
#if 0
if (m_local_host) {
@@ -105,7 +105,7 @@ void IPCEngineGuest::rpcCall(IPCEngineGuest::Function f, QByteArray payload )
void IPCEngineGuest::readyRead()
{
if (!m_nextMessagePayloadSize) {
if (quint64(m_device->bytesAvailable()) < (sizeof(quint64) * 3))
if (quint64(m_device->bytesAvailable()) < 3 * sizeof(quint64))
return;
QDataStream s(m_device);
SET_NATIVE_BYTE_ORDER(s);
@@ -119,7 +119,7 @@ void IPCEngineGuest::readyRead()
if (ba < m_nextMessagePayloadSize)
return;
qint64 rrr = (m_nextMessagePayloadSize);
qint64 rrr = m_nextMessagePayloadSize;
QByteArray payload = m_device->read(rrr);
if (quint64(payload.size()) != m_nextMessagePayloadSize || !payload.endsWith('T')) {
showMessage(QLatin1String("IPC Error: corrupted frame"));
@@ -132,7 +132,7 @@ void IPCEngineGuest::readyRead()
rpcCallback(m_nextMessageFunction, payload);
m_nextMessagePayloadSize = 0;
if (quint64(m_device->bytesAvailable ()) >= (sizeof(quint64) * 3))
if (quint64(m_device->bytesAvailable ()) >= 3 * sizeof(quint64) * 3)
QTimer::singleShot(0, this, SLOT(readyRead()));
}
@@ -601,7 +601,7 @@ void IPCEngineGuest::updateWatchData(bool fullCycle, const QList<WatchData> &wd)
SET_NATIVE_BYTE_ORDER(s);
s << fullCycle;
s << quint64(wd.count());
for (int i = 0; i < wd.count(); i++)
for (int i = 0; i < wd.count(); ++i)
s << wd.at(i);
}
rpcCall(UpdateWatchData, p);
+12 -13
View File
@@ -58,12 +58,12 @@ namespace Internal {
IPCEngineHost::IPCEngineHost (const DebuggerStartParameters &startParameters)
: DebuggerEngine(startParameters)
, m_local_guest(0)
, m_localGuest(0)
, m_nextMessagePayloadSize(0)
, m_cookie(1)
, m_device(0)
{
connect(this, SIGNAL(stateChanged(DebuggerState)), this, SLOT(m_stateChanged(DebuggerState)));
connect(this, SIGNAL(stateChanged(DebuggerState)), SLOT(m_stateChanged(DebuggerState)));
}
IPCEngineHost::~IPCEngineHost()
@@ -71,18 +71,18 @@ IPCEngineHost::~IPCEngineHost()
delete m_device;
}
void IPCEngineHost::setLocalGuest(IPCEngineGuest *g)
void IPCEngineHost::setLocalGuest(IPCEngineGuest *guest)
{
m_local_guest = g;
m_localGuest = guest;
}
void IPCEngineHost::setGuestDevice(QIODevice *d)
void IPCEngineHost::setGuestDevice(QIODevice *device)
{
if (m_device) {
disconnect(m_device, SIGNAL(readyRead()), this, SLOT(readyRead()));
delete m_device;
}
m_device = d;
m_device = device;
if (m_device)
connect(m_device, SIGNAL(readyRead()), this, SLOT(readyRead()));
}
@@ -461,7 +461,7 @@ void IPCEngineHost::rpcCallback(quint64 f, QByteArray payload)
QList<WatchData> wd;
s >> fullCycle;
s >> count;
for (qint64 i = 0; i < count; i++) {
for (qint64 i = 0; i < count; ++i) {
WatchData d;
s >> d;
wd.append(d);
@@ -548,8 +548,8 @@ void IPCEngineHost::m_stateChanged(const DebuggerState &state)
void IPCEngineHost::rpcCall(Function f, QByteArray payload)
{
if (m_local_guest) {
QMetaObject::invokeMethod(m_local_guest,
if (m_localGuest) {
QMetaObject::invokeMethod(m_localGuest,
"rpcCallback",
Qt::QueuedConnection,
Q_ARG(quint64, f),
@@ -574,12 +574,12 @@ void IPCEngineHost::readyRead()
QDataStream s(m_device);
SET_NATIVE_BYTE_ORDER(s);
if (!m_nextMessagePayloadSize) {
if (quint64(m_device->bytesAvailable ()) < (sizeof(quint64) * 3))
if (quint64(m_device->bytesAvailable ()) < 3 * sizeof(quint64))
return;
s >> m_nextMessageCookie;
s >> m_nextMessageFunction;
s >> m_nextMessagePayloadSize;
m_nextMessagePayloadSize += 1; // terminator and "got header" marker
m_nextMessagePayloadSize += 1; // Terminator and "got header" marker.
}
quint64 ba = m_device->bytesAvailable();
@@ -598,11 +598,10 @@ void IPCEngineHost::readyRead()
}
rpcCallback(m_nextMessageFunction, payload);
m_nextMessagePayloadSize = 0;
if (quint64(m_device->bytesAvailable()) >= (sizeof(quint64) * 3))
if (quint64(m_device->bytesAvailable()) >= 3 * sizeof(quint64))
QTimer::singleShot(0, this, SLOT(readyRead()));
}
} // namespace Internal
} // namespace Debugger
+2 -2
View File
@@ -118,13 +118,13 @@ private slots:
void m_stateChanged(const DebuggerState &state);
void readyRead();
private:
IPCEngineGuest *m_local_guest;
IPCEngineGuest *m_localGuest;
quint64 m_nextMessageCookie;
quint64 m_nextMessageFunction;
quint64 m_nextMessagePayloadSize;
quint64 m_cookie;
QIODevice *m_device;
QHash <quint64, DisassemblerViewAgent *> m_frameToDisassemblerAgent;
QHash<quint64, DisassemblerViewAgent *> m_frameToDisassemblerAgent;
};
} // namespace Internal
+17 -17
View File
@@ -60,23 +60,23 @@
namespace Debugger {
namespace Internal {
LLDBEngineHost::LLDBEngineHost(const DebuggerStartParameters &startParameters)
LldbEngineHost::LldbEngineHost(const DebuggerStartParameters &startParameters)
:IPCEngineHost(startParameters)
{
QLocalServer *s = new QLocalServer(this);
s->removeServer (QLatin1String("/tmp/qtcreator-debuggeripc"));
s->listen (QLatin1String("/tmp/qtcreator-debuggeripc"));
s->removeServer(QLatin1String("/tmp/qtcreator-debuggeripc"));
s->listen(QLatin1String("/tmp/qtcreator-debuggeripc"));
m_guestp = new QProcess(this);
m_guestp->setProcessChannelMode(QProcess::ForwardedChannels);
m_guestProcess = new QProcess(this);
m_guestProcess->setProcessChannelMode(QProcess::ForwardedChannels);
connect(m_guestp, SIGNAL(finished(int, QProcess::ExitStatus)),
this, SLOT(finished (int, QProcess::ExitStatus)));
connect(m_guestProcess, SIGNAL(finished(int, QProcess::ExitStatus)),
this, SLOT(finished(int, QProcess::ExitStatus)));
QString a(Core::ICore::instance()->resourcePath() + QLatin1String("/qtcreator-lldb"));
m_guestp->start(a,QStringList());
QString a = Core::ICore::instance()->resourcePath() + QLatin1String("/qtcreator-lldb");
m_guestProcess->start(a, QStringList());
if (!m_guestp->waitForStarted()) {
if (!m_guestProcess->waitForStarted()) {
showStatusMessage(tr("lldb failed to start"));
notifyEngineIll();
return;
@@ -88,23 +88,23 @@ LLDBEngineHost::LLDBEngineHost(const DebuggerStartParameters &startParameters)
setGuestDevice(f);
}
LLDBEngineHost::~LLDBEngineHost()
LldbEngineHost::~LldbEngineHost()
{
disconnect(m_guestp, SIGNAL(finished(int, QProcess::ExitStatus)),
disconnect(m_guestProcess, SIGNAL(finished(int, QProcess::ExitStatus)),
this, SLOT(finished (int, QProcess::ExitStatus)));
m_guestp->terminate();
m_guestp->kill();
m_guestProcess->terminate();
m_guestProcess->kill();
}
void LLDBEngineHost::finished(int, QProcess::ExitStatus)
void LldbEngineHost::finished(int, QProcess::ExitStatus)
{
showStatusMessage(QLatin1String("lldb crashed"));
notifyEngineIll();
}
DebuggerEngine *createLLDBEngine(const DebuggerStartParameters &startParameters)
DebuggerEngine *createLldbEngine(const DebuggerStartParameters &startParameters)
{
return new LLDBEngineHost(startParameters);
return new LldbEngineHost(startParameters);
}
} // namespace Internal
+9 -6
View File
@@ -37,19 +37,22 @@
namespace Debugger {
namespace Internal {
class LLDBEngineHost : public IPCEngineHost
class LldbEngineHost : public IPCEngineHost
{
Q_OBJECT
public:
explicit LLDBEngineHost(const DebuggerStartParameters &startParameters);
~LLDBEngineHost();
explicit LldbEngineHost(const DebuggerStartParameters &startParameters);
~LldbEngineHost();
private:
QProcess *m_guestp;
QProcess *m_guestProcess;
private slots:
void finished (int, QProcess::ExitStatus);
void finished(int, QProcess::ExitStatus);
};
} // namespace Internal
} // namespace Debugger
#endif // DEBUGGER_LLDBENGINE_H
#endif // DEBUGGER_LLDBENGINE_HOST_H
+8 -7
View File
@@ -119,7 +119,7 @@ void QmlCppEngine::setActiveEngine(DebuggerLanguage language)
}
if (previousEngine != d->m_activeEngine) {
showStatusMessage(tr("%1 debugger activated").arg(engineName));
Internal::debuggerCore()->displayDebugger(d->m_activeEngine, updateEngine);
debuggerCore()->displayDebugger(d->m_activeEngine, updateEngine);
}
}
@@ -138,8 +138,8 @@ void QmlCppEngine::setToolTipExpression(const QPoint & mousePos,
d->m_activeEngine->setToolTipExpression(mousePos, editor, cursorPos);
}
void QmlCppEngine::updateWatchData(const Internal::WatchData &data,
const Internal::WatchUpdateFlags &flags)
void QmlCppEngine::updateWatchData(const WatchData &data,
const WatchUpdateFlags &flags)
{
d->m_activeEngine->updateWatchData(data, flags);
}
@@ -149,13 +149,13 @@ void QmlCppEngine::watchPoint(const QPoint &point)
d->m_cppEngine->watchPoint(point);
}
void QmlCppEngine::fetchMemory(Internal::MemoryViewAgent *mva, QObject *obj,
void QmlCppEngine::fetchMemory(MemoryViewAgent *mva, QObject *obj,
quint64 addr, quint64 length)
{
d->m_cppEngine->fetchMemory(mva, obj, addr, length);
}
void QmlCppEngine::fetchDisassembler(Internal::DisassemblerViewAgent *dva)
void QmlCppEngine::fetchDisassembler(DisassemblerViewAgent *dva)
{
d->m_cppEngine->fetchDisassembler(dva);
}
@@ -253,9 +253,10 @@ void QmlCppEngine::selectThread(int index)
d->m_cppEngine->selectThread(index);
}
void QmlCppEngine::assignValueInDebugger(const Internal::WatchData *w, const QString &expr, const QVariant &value)
void QmlCppEngine::assignValueInDebugger(const WatchData *data,
const QString &expr, const QVariant &value)
{
d->m_activeEngine->assignValueInDebugger(w, expr, value);
d->m_activeEngine->assignValueInDebugger(data, expr, value);
}
QAbstractItemModel *QmlCppEngine::modulesModel() const