forked from qt-creator/qt-creator
debugger: find better separation between runcontrol and engine
This commit is contained in:
@@ -54,7 +54,6 @@ class SavedAction;
|
||||
namespace Debugger {
|
||||
|
||||
class DebuggerEngine;
|
||||
class DebuggerRunControl;
|
||||
class DebuggerStartParameters;
|
||||
|
||||
namespace Internal {
|
||||
@@ -101,8 +100,8 @@ public:
|
||||
virtual void removeLocationMark() = 0;
|
||||
|
||||
virtual bool isReverseDebugging() const = 0;
|
||||
virtual void runControlStarted(DebuggerRunControl *runControl) = 0;
|
||||
virtual void runControlFinished(DebuggerRunControl *runControl) = 0;
|
||||
virtual void runControlStarted(DebuggerEngine *engine) = 0;
|
||||
virtual void runControlFinished(DebuggerEngine *engine) = 0;
|
||||
virtual void displayDebugger(DebuggerEngine *engine, bool updateEngine) = 0;
|
||||
virtual DebuggerLanguages activeLanguages() const = 0;
|
||||
virtual void synchronizeBreakpoints() = 0;
|
||||
|
@@ -333,9 +333,9 @@ protected:
|
||||
virtual void shutdownInferior() = 0;
|
||||
virtual void shutdownEngine() = 0;
|
||||
|
||||
protected:
|
||||
DebuggerRunControl *runControl() const;
|
||||
DebuggerRunControl *runControl() const; // FIXME: Protect.
|
||||
|
||||
protected:
|
||||
static QString msgWatchpointTriggered(BreakpointId id,
|
||||
int number, quint64 address);
|
||||
static QString msgWatchpointTriggered(BreakpointId id,
|
||||
|
@@ -980,22 +980,18 @@ public slots:
|
||||
{
|
||||
showMessage("ATTEMPT SYNC", LogDebug);
|
||||
for (int i = 0, n = m_snapshotHandler->size(); i != n; ++i) {
|
||||
if (DebuggerRunControl *runControl = m_snapshotHandler->at(i)) {
|
||||
DebuggerEngine *engine = runControl->engine();
|
||||
if (DebuggerEngine *engine = m_snapshotHandler->at(i))
|
||||
engine->attemptBreakpointSynchronization();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void synchronizeWatchers()
|
||||
{
|
||||
for (int i = 0, n = m_snapshotHandler->size(); i != n; ++i) {
|
||||
if (DebuggerRunControl *runControl = m_snapshotHandler->at(i)) {
|
||||
DebuggerEngine *engine = runControl->engine();
|
||||
if (DebuggerEngine *engine = m_snapshotHandler->at(i))
|
||||
engine->watchHandler()->updateWatchers();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void editorOpened(Core::IEditor *editor);
|
||||
void editorAboutToClose(Core::IEditor *editor);
|
||||
@@ -1043,8 +1039,8 @@ public slots:
|
||||
bool hasSnapshots() const { return m_snapshotHandler->size(); }
|
||||
void createNewDock(QWidget *widget);
|
||||
|
||||
void runControlStarted(DebuggerRunControl *runControl);
|
||||
void runControlFinished(DebuggerRunControl *runControl);
|
||||
void runControlStarted(DebuggerEngine *engine);
|
||||
void runControlFinished(DebuggerEngine *engine);
|
||||
DebuggerLanguages activeLanguages() const;
|
||||
QString gdbBinaryForToolChain(int toolChain) const;
|
||||
void remoteCommand(const QStringList &options, const QStringList &);
|
||||
@@ -1477,11 +1473,11 @@ void DebuggerPluginPrivate::onCurrentProjectChanged(Project *project)
|
||||
}
|
||||
for (int i = 0, n = m_snapshotHandler->size(); i != n; ++i) {
|
||||
// Run controls might be deleted during exit.
|
||||
if (DebuggerRunControl *runControl = m_snapshotHandler->at(i)) {
|
||||
if (DebuggerEngine *engine = m_snapshotHandler->at(i)) {
|
||||
DebuggerRunControl *runControl = engine->runControl();
|
||||
RunConfiguration *rc = runControl->runConfiguration();
|
||||
if (rc == activeRc) {
|
||||
m_snapshotHandler->setCurrentIndex(i);
|
||||
DebuggerEngine *engine = runControl->engine();
|
||||
updateState(engine);
|
||||
return;
|
||||
}
|
||||
@@ -2387,7 +2383,7 @@ void DebuggerPluginPrivate::aboutToUnloadSession()
|
||||
// with command-line debugging startup.
|
||||
// FIXME ABC: Still wanted? Iterate?
|
||||
//if (d->m_engine && state() != DebuggerNotReady
|
||||
// && runControl()->sp().startMode == StartInternal)
|
||||
// && engine()->sp().startMode == StartInternal)
|
||||
// d->m_engine->shutdown();
|
||||
}
|
||||
|
||||
@@ -2578,22 +2574,21 @@ void DebuggerPluginPrivate::createNewDock(QWidget *widget)
|
||||
dockWidget->show();
|
||||
}
|
||||
|
||||
void DebuggerPluginPrivate::runControlStarted(DebuggerRunControl *runControl)
|
||||
void DebuggerPluginPrivate::runControlStarted(DebuggerEngine *engine)
|
||||
{
|
||||
activateDebugMode();
|
||||
DebuggerEngine *engine = runControl->engine();
|
||||
const QString message = tr("Starting debugger '%1' for tool chain '%2'...")
|
||||
.arg(engine->objectName())
|
||||
.arg(engine->startParameters().toolChainName());
|
||||
showMessage(message, StatusBar);
|
||||
showMessage(m_debuggerSettings->dump(), LogDebug);
|
||||
m_snapshotHandler->appendSnapshot(runControl);
|
||||
m_snapshotHandler->appendSnapshot(engine);
|
||||
connectEngine(engine);
|
||||
}
|
||||
|
||||
void DebuggerPluginPrivate::runControlFinished(DebuggerRunControl *runControl)
|
||||
void DebuggerPluginPrivate::runControlFinished(DebuggerEngine *engine)
|
||||
{
|
||||
m_snapshotHandler->removeSnapshot(runControl);
|
||||
m_snapshotHandler->removeSnapshot(engine);
|
||||
if (m_snapshotHandler->size() == 0) {
|
||||
// Last engine quits.
|
||||
disconnectEngine();
|
||||
|
@@ -656,7 +656,7 @@ void DebuggerRunControl::start()
|
||||
return;
|
||||
}
|
||||
|
||||
debuggerCore()->runControlStarted(this);
|
||||
debuggerCore()->runControlStarted(engine());
|
||||
|
||||
// We might get a synchronous startFailed() notification on Windows,
|
||||
// when launching the process fails. Emit a proper finished() sequence.
|
||||
@@ -684,7 +684,7 @@ void DebuggerRunControl::handleFinished()
|
||||
emit addToOutputWindowInline(this, tr("Debugging has finished"), false);
|
||||
if (engine())
|
||||
engine()->handleFinished();
|
||||
debuggerCore()->runControlFinished(this);
|
||||
debuggerCore()->runControlFinished(engine());
|
||||
}
|
||||
|
||||
void DebuggerRunControl::showMessage(const QString &msg, int channel)
|
||||
|
@@ -123,7 +123,7 @@ SnapshotHandler::SnapshotHandler()
|
||||
SnapshotHandler::~SnapshotHandler()
|
||||
{
|
||||
for (int i = m_snapshots.size(); --i >= 0; ) {
|
||||
if (DebuggerEngine *engine = engineAt(i)) {
|
||||
if (DebuggerEngine *engine = at(i)) {
|
||||
const DebuggerStartParameters &sp = engine->startParameters();
|
||||
if (sp.isSnapshot && !sp.coreFile.isEmpty())
|
||||
QFile::remove(sp.coreFile);
|
||||
@@ -131,13 +131,6 @@ SnapshotHandler::~SnapshotHandler()
|
||||
}
|
||||
}
|
||||
|
||||
DebuggerEngine *SnapshotHandler::engineAt(int i) const
|
||||
{
|
||||
DebuggerEngine *engine = m_snapshots.at(i)->engine();
|
||||
QTC_ASSERT(engine, qDebug() << "ENGINE AT " << i << "DELETED");
|
||||
return engine;
|
||||
}
|
||||
|
||||
int SnapshotHandler::rowCount(const QModelIndex &parent) const
|
||||
{
|
||||
// Since the stack is not a tree, row count is 0 for any valid parent
|
||||
@@ -154,7 +147,7 @@ QVariant SnapshotHandler::data(const QModelIndex &index, int role) const
|
||||
if (!index.isValid() || index.row() >= m_snapshots.size())
|
||||
return QVariant();
|
||||
|
||||
const DebuggerEngine *engine = engineAt(index.row());
|
||||
const DebuggerEngine *engine = at(index.row());
|
||||
|
||||
if (role == SnapshotCapabilityRole)
|
||||
return engine && (engine->debuggerCapabilities() & SnapshotCapability);
|
||||
@@ -213,20 +206,20 @@ void SnapshotHandler::activateSnapshot(int index)
|
||||
{
|
||||
m_currentIndex = index;
|
||||
//qDebug() << "ACTIVATING INDEX: " << m_currentIndex << " OF " << size();
|
||||
debuggerCore()->displayDebugger(engineAt(index), true);
|
||||
debuggerCore()->displayDebugger(at(index), true);
|
||||
reset();
|
||||
}
|
||||
|
||||
void SnapshotHandler::createSnapshot(int index)
|
||||
{
|
||||
DebuggerEngine *engine = engineAt(index);
|
||||
DebuggerEngine *engine = at(index);
|
||||
QTC_ASSERT(engine, return);
|
||||
engine->createSnapshot();
|
||||
}
|
||||
|
||||
void SnapshotHandler::removeSnapshot(int index)
|
||||
{
|
||||
DebuggerEngine *engine = engineAt(index);
|
||||
DebuggerEngine *engine = at(index);
|
||||
//qDebug() << "REMOVING " << engine;
|
||||
QTC_ASSERT(engine, return);
|
||||
#if 0
|
||||
@@ -254,17 +247,17 @@ void SnapshotHandler::removeAll()
|
||||
reset();
|
||||
}
|
||||
|
||||
void SnapshotHandler::appendSnapshot(DebuggerRunControl *rc)
|
||||
void SnapshotHandler::appendSnapshot(DebuggerEngine *engine)
|
||||
{
|
||||
m_snapshots.append(rc);
|
||||
m_snapshots.append(engine);
|
||||
m_currentIndex = size() - 1;
|
||||
reset();
|
||||
}
|
||||
|
||||
void SnapshotHandler::removeSnapshot(DebuggerRunControl *rc)
|
||||
void SnapshotHandler::removeSnapshot(DebuggerEngine *engine)
|
||||
{
|
||||
// Could be that the run controls died before it was appended.
|
||||
int index = m_snapshots.indexOf(rc);
|
||||
int index = m_snapshots.indexOf(engine);
|
||||
if (index != -1)
|
||||
removeSnapshot(index);
|
||||
}
|
||||
@@ -275,22 +268,10 @@ void SnapshotHandler::setCurrentIndex(int index)
|
||||
reset();
|
||||
}
|
||||
|
||||
DebuggerRunControl *SnapshotHandler::at(int i) const
|
||||
DebuggerEngine *SnapshotHandler::at(int i) const
|
||||
{
|
||||
return m_snapshots.at(i).data();
|
||||
}
|
||||
|
||||
QList<DebuggerRunControl*> SnapshotHandler::runControls() const
|
||||
{
|
||||
// Return unique list of run controls
|
||||
QList<DebuggerRunControl*> rc;
|
||||
rc.reserve(m_snapshots.size());
|
||||
foreach(const QPointer<DebuggerRunControl> &runControlPtr, m_snapshots)
|
||||
if (DebuggerRunControl *runControl = runControlPtr)
|
||||
if (!rc.contains(runControl))
|
||||
rc.push_back(runControl);
|
||||
return rc;
|
||||
}
|
||||
|
||||
} // namespace Internal
|
||||
} // namespace Debugger
|
||||
|
@@ -35,7 +35,6 @@
|
||||
|
||||
namespace Debugger {
|
||||
|
||||
class DebuggerRunControl;
|
||||
class DebuggerEngine;
|
||||
|
||||
namespace Internal {
|
||||
@@ -59,12 +58,11 @@ public:
|
||||
void removeAll();
|
||||
QAbstractItemModel *model() { return this; }
|
||||
int currentIndex() const { return m_currentIndex; }
|
||||
void appendSnapshot(DebuggerRunControl *rc);
|
||||
void removeSnapshot(DebuggerRunControl *rc);
|
||||
void appendSnapshot(DebuggerEngine *engine);
|
||||
void removeSnapshot(DebuggerEngine *engine);
|
||||
void setCurrentIndex(int index);
|
||||
int size() const { return m_snapshots.size(); }
|
||||
DebuggerRunControl *at(int index) const;
|
||||
QList<DebuggerRunControl *> runControls() const;
|
||||
DebuggerEngine *at(int index) const;
|
||||
|
||||
void createSnapshot(int index);
|
||||
void activateSnapshot(int index);
|
||||
@@ -78,10 +76,9 @@ private:
|
||||
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
|
||||
Qt::ItemFlags flags(const QModelIndex &index) const;
|
||||
Q_SLOT void resetModel() { reset(); }
|
||||
DebuggerEngine *engineAt(int i) const;
|
||||
|
||||
int m_currentIndex;
|
||||
QList< QPointer<DebuggerRunControl> > m_snapshots;
|
||||
QList< QPointer<DebuggerEngine> > m_snapshots;
|
||||
const QVariant m_positionIcon;
|
||||
const QVariant m_emptyIcon;
|
||||
};
|
||||
|
@@ -32,7 +32,7 @@
|
||||
|
||||
#include "debuggeractions.h"
|
||||
#include "debuggercore.h"
|
||||
#include "debuggerrunner.h"
|
||||
#include "debuggerengine.h"
|
||||
|
||||
#include <utils/qtcassert.h>
|
||||
#include <utils/savedaction.h>
|
||||
@@ -136,7 +136,7 @@ void SnapshotWindow::contextMenuEvent(QContextMenuEvent *ev)
|
||||
|
||||
void SnapshotWindow::removeSnapshot(int i)
|
||||
{
|
||||
m_snapshotHandler->at(i)->stop();
|
||||
m_snapshotHandler->at(i)->quitDebugger();
|
||||
}
|
||||
|
||||
void SnapshotWindow::resizeColumnsToContents()
|
||||
|
Reference in New Issue
Block a user