Commit b557c58e authored by Lasse Holmstedt's avatar Lasse Holmstedt
Browse files

Qml Debugger: Enable debugging qml+cpp standalone applications

A new debugger engine, QmlCppEngine, is introduced, which wraps gdb
and qml engines into one. Alternatively, if using Windows, Cdb is used
instead of Gdb.

Most of the debugger ui switcher is now rewritten, and it is tailored
for the QML and CPP layout case, the only one supported anyway.

Reviewed-by: hjk
parent ef11c4e7
...@@ -58,6 +58,7 @@ public: ...@@ -58,6 +58,7 @@ public:
QToolBar *toolbar() const; QToolBar *toolbar() const;
static QString idStringForObject(QObject *obj); static QString idStringForObject(QObject *obj);
QRectF adjustToScreenBoundaries(const QRectF &boundingRectInSceneSpace); QRectF adjustToScreenBoundaries(const QRectF &boundingRectInSceneSpace);
void setDebugMode(bool isDebugMode);
public Q_SLOTS: public Q_SLOTS:
void setDesignModeBehavior(bool value); void setDesignModeBehavior(bool value);
......
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
#include "boundingrecthighlighter.h" #include "boundingrecthighlighter.h"
#include "subcomponenteditortool.h" #include "subcomponenteditortool.h"
#include "qmltoolbar.h" #include "qmltoolbar.h"
#include "jsdebuggeragent.h"
#include <QDeclarativeItem> #include <QDeclarativeItem>
#include <QDeclarativeEngine> #include <QDeclarativeEngine>
...@@ -48,6 +49,7 @@ ...@@ -48,6 +49,7 @@
#include <QApplication> #include <QApplication>
#include <QAbstractAnimation> #include <QAbstractAnimation>
#include <private/qdeclarativeengine_p.h>
#include <private/qabstractanimation_p.h> #include <private/qabstractanimation_p.h>
namespace QmlViewer { namespace QmlViewer {
...@@ -61,6 +63,7 @@ QDeclarativeDesignViewPrivate::QDeclarativeDesignViewPrivate(QDeclarativeDesignV ...@@ -61,6 +63,7 @@ QDeclarativeDesignViewPrivate::QDeclarativeDesignViewPrivate(QDeclarativeDesignV
designModeBehavior(false), designModeBehavior(false),
executionPaused(false), executionPaused(false),
slowdownFactor(1.0f), slowdownFactor(1.0f),
jsDebuggerAgent(0),
toolbar(0) toolbar(0)
{ {
sceneChangedTimer.setInterval(SceneChangeUpdateInterval); sceneChangedTimer.setInterval(SceneChangeUpdateInterval);
...@@ -116,6 +119,9 @@ QDeclarativeDesignView::QDeclarativeDesignView(QWidget *parent) : ...@@ -116,6 +119,9 @@ QDeclarativeDesignView::QDeclarativeDesignView(QWidget *parent) :
data->createToolbar(); data->createToolbar();
data->_q_changeToSingleSelectTool(); data->_q_changeToSingleSelectTool();
// always start debug mode - that's what this design view is for.
setDebugMode(true);
} }
QDeclarativeDesignView::~QDeclarativeDesignView() QDeclarativeDesignView::~QDeclarativeDesignView()
...@@ -763,6 +769,12 @@ void QDeclarativeDesignViewPrivate::createToolbar() ...@@ -763,6 +769,12 @@ void QDeclarativeDesignViewPrivate::createToolbar()
QObject::connect(q, SIGNAL(marqueeSelectToolActivated()), toolbar, SLOT(activateMarqueeSelectTool())); QObject::connect(q, SIGNAL(marqueeSelectToolActivated()), toolbar, SLOT(activateMarqueeSelectTool()));
} }
void QDeclarativeDesignView::setDebugMode(bool isDebugMode)
{
if (isDebugMode && !data->jsDebuggerAgent)
data->jsDebuggerAgent = new JSDebuggerAgent(QDeclarativeEnginePrivate::getScriptEngine(engine()));
}
} //namespace QmlViewer } //namespace QmlViewer
#include <moc_qdeclarativedesignview.cpp> #include <moc_qdeclarativedesignview.cpp>
...@@ -36,6 +36,8 @@ ...@@ -36,6 +36,8 @@
#include "qdeclarativedesignview.h" #include "qdeclarativedesignview.h"
QT_FORWARD_DECLARE_CLASS(JSDebuggerAgent)
namespace QmlViewer { namespace QmlViewer {
class QDeclarativeDesignView; class QDeclarativeDesignView;
...@@ -82,6 +84,8 @@ public: ...@@ -82,6 +84,8 @@ public:
bool executionPaused; bool executionPaused;
qreal slowdownFactor; qreal slowdownFactor;
JSDebuggerAgent *jsDebuggerAgent;
QmlToolbar *toolbar; QmlToolbar *toolbar;
QTimer sceneChangedTimer; QTimer sceneChangedTimer;
QSet<QGraphicsObject *> sceneGraphicsObjects; QSet<QGraphicsObject *> sceneGraphicsObjects;
......
...@@ -38,19 +38,19 @@ namespace Constants { ...@@ -38,19 +38,19 @@ namespace Constants {
// modes and their priorities // modes and their priorities
const char * const MODE_DEBUG = "Debugger.Mode.Debug"; const char * const MODE_DEBUG = "Debugger.Mode.Debug";
const int P_MODE_DEBUG = 85; const int P_MODE_DEBUG = 85;
const char * const LANG_CPP = "C++";
// common actions // common actions
const char * const STOP = "Debugger.Interrupt"; const char * const STOP = "Debugger.Interrupt";
const char * const RESET = "Debugger.Reset"; const char * const RESET = "Debugger.Reset";
const char * const STEP = "Debugger.StepLine"; const char * const STEP = "Debugger.StepLine";
const char * const STEPOUT = "Debugger.StepOut"; const char * const STEPOUT = "Debugger.StepOut";
const char * const NEXT = "Debugger.NextLine"; const char * const NEXT = "Debugger.NextLine";
const char * const REVERSE = "Debugger.ReverseDirection"; const char * const REVERSE = "Debugger.ReverseDirection";
const char * const M_DEBUG_LANGUAGES = "Debugger.Menu.View.Languages"; const char * const M_DEBUG_DEBUGGING_LANGUAGES = "Debugger.Menu.View.DebugLanguages";
const char * const M_DEBUG_VIEWS = "Debugger.Menu.View.Debug"; const char * const M_DEBUG_VIEWS = "Debugger.Menu.View.Debug";
const char * const C_DEBUGMODE = "Debugger.DebugMode"; const char * const C_DEBUGMODE = "Debugger.DebugMode";
const char * const C_CPPDEBUGGER = "Gdb Debugger"; const char * const C_CPPDEBUGGER = "Gdb Debugger";
const char * const DEBUGGER_COMMON_SETTINGS_ID = "A.Common"; const char * const DEBUGGER_COMMON_SETTINGS_ID = "A.Common";
...@@ -62,6 +62,22 @@ const char * const DEBUGGER_SETTINGS_TR_CATEGORY = ...@@ -62,6 +62,22 @@ const char * const DEBUGGER_SETTINGS_TR_CATEGORY =
const char * const DEBUGGER_COMMON_SETTINGS_CATEGORY_ICON = const char * const DEBUGGER_COMMON_SETTINGS_CATEGORY_ICON =
":/core/images/category_debug.png"; ":/core/images/category_debug.png";
const int QML_DEFAULT_DEBUG_SERVER_PORT = 3768;
const char * const E_QML_DEBUG_SERVER_PORT = "QML_DEBUG_SERVER_PORT";
// dock widget names
const char * const DW_BREAK = "Debugger.Docks.Break";
const char * const DW_MODULES = "Debugger.Docks.Modules";
const char * const DW_REGISTER = "Debugger.Docks.Register";
const char * const DW_OUTPUT = "Debugger.Docks.Output";
const char * const DW_SNAPSHOTS = "Debugger.Docks.Snapshots";
const char * const DW_STACK = "Debugger.Docks.Stack";
const char * const DW_SOURCE_FILES = "Debugger.Docks.SourceFiles";
const char * const DW_THREADS = "Debugger.Docks.Threads";
const char * const DW_WATCHERS = "Debugger.Docks.LocalsAndWatchers";
const char * const DW_QML_INSPECTOR = "Debugger.Docks.QmlInspector";
namespace Internal { namespace Internal {
enum { debug = 0 }; enum { debug = 0 };
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
...@@ -71,6 +87,7 @@ namespace Internal { ...@@ -71,6 +87,7 @@ namespace Internal {
#endif #endif
} // namespace Internal } // namespace Internal
} // namespace Constants } // namespace Constants
...@@ -267,13 +284,23 @@ enum DebuggerEngineType ...@@ -267,13 +284,23 @@ enum DebuggerEngineType
PdbEngineType = 0x08, PdbEngineType = 0x08,
TcfEngineType = 0x10, TcfEngineType = 0x10,
QmlEngineType = 0x20, QmlEngineType = 0x20,
QmlCppEngineType = 0x40,
AllEngineTypes = GdbEngineType AllEngineTypes = GdbEngineType
| ScriptEngineType | ScriptEngineType
| CdbEngineType | CdbEngineType
| PdbEngineType | PdbEngineType
| TcfEngineType | TcfEngineType
| QmlEngineType | QmlEngineType
| QmlCppEngineType
};
enum DebuggerLanguage
{
Lang_None = 0x0,
Lang_Cpp = 0x1,
Lang_Qml = 0x2
}; };
Q_DECLARE_FLAGS(DebuggerLanguages, DebuggerLanguage)
} // namespace Debugger } // namespace Debugger
......
...@@ -106,12 +106,14 @@ using namespace TextEditor; ...@@ -106,12 +106,14 @@ using namespace TextEditor;
/////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////
DebuggerStartParameters::DebuggerStartParameters() DebuggerStartParameters::DebuggerStartParameters()
: attachPID(-1), : attachPID(-1)
useTerminal(false), , useTerminal(false)
breakAtMain(false), , breakAtMain(false)
toolChainType(ToolChain::UNKNOWN), , qmlServerAddress("127.0.0.1")
startMode(NoStartMode), , qmlServerPort(0)
executableUid(0) , toolChainType(ToolChain::UNKNOWN)
, executableUid(0)
, startMode(NoStartMode)
{} {}
void DebuggerStartParameters::clear() void DebuggerStartParameters::clear()
...@@ -233,7 +235,8 @@ public: ...@@ -233,7 +235,8 @@ public:
m_stackHandler(engine), m_stackHandler(engine),
m_threadsHandler(engine), m_threadsHandler(engine),
m_watchHandler(engine), m_watchHandler(engine),
m_disassemblerViewAgent(engine) m_disassemblerViewAgent(engine),
m_runInWrapperEngine(false)
{} {}
~DebuggerEnginePrivate() {} ~DebuggerEnginePrivate() {}
...@@ -312,6 +315,8 @@ public: ...@@ -312,6 +315,8 @@ public:
WatchHandler m_watchHandler; WatchHandler m_watchHandler;
DisassemblerViewAgent m_disassemblerViewAgent; DisassemblerViewAgent m_disassemblerViewAgent;
QFutureInterface<void> m_progress; QFutureInterface<void> m_progress;
bool m_runInWrapperEngine;
}; };
void DebuggerEnginePrivate::breakpointSetRemoveMarginActionTriggered() void DebuggerEnginePrivate::breakpointSetRemoveMarginActionTriggered()
...@@ -1329,7 +1334,11 @@ void DebuggerEngine::notifyEngineShutdownOk() ...@@ -1329,7 +1334,11 @@ void DebuggerEngine::notifyEngineShutdownOk()
showMessage(_("NOTE: ENGINE SHUTDOWN OK")); showMessage(_("NOTE: ENGINE SHUTDOWN OK"));
QTC_ASSERT(state() == EngineShutdownRequested, qDebug() << state()); QTC_ASSERT(state() == EngineShutdownRequested, qDebug() << state());
setState(EngineShutdownOk); setState(EngineShutdownOk);
d->queueFinishDebugger(); if (!d->m_runInWrapperEngine) {
d->queueFinishDebugger();
} else {
setState(DebuggerFinished);
}
} }
void DebuggerEngine::notifyEngineShutdownFailed() void DebuggerEngine::notifyEngineShutdownFailed()
...@@ -1337,7 +1346,11 @@ void DebuggerEngine::notifyEngineShutdownFailed() ...@@ -1337,7 +1346,11 @@ void DebuggerEngine::notifyEngineShutdownFailed()
showMessage(_("NOTE: ENGINE SHUTDOWN FAILED")); showMessage(_("NOTE: ENGINE SHUTDOWN FAILED"));
QTC_ASSERT(state() == EngineShutdownRequested, qDebug() << state()); QTC_ASSERT(state() == EngineShutdownRequested, qDebug() << state());
setState(EngineShutdownFailed); setState(EngineShutdownFailed);
d->queueFinishDebugger(); if (!d->m_runInWrapperEngine) {
d->queueFinishDebugger();
} else {
setState(DebuggerFinished);
}
} }
void DebuggerEnginePrivate::doFinishDebugger() void DebuggerEnginePrivate::doFinishDebugger()
...@@ -1395,7 +1408,7 @@ void DebuggerEngine::notifyInferiorExited() ...@@ -1395,7 +1408,7 @@ void DebuggerEngine::notifyInferiorExited()
void DebuggerEngine::setState(DebuggerState state, bool forced) void DebuggerEngine::setState(DebuggerState state, bool forced)
{ {
//qDebug() << "STATUS CHANGE: FROM " << stateName(d->m_state) //qDebug() << "STATUS CHANGE: FROM " << stateName(d->m_state)
// << " TO " << stateName(state); // << " TO " << stateName(state);
DebuggerState oldState = d->m_state; DebuggerState oldState = d->m_state;
d->m_state = state; d->m_state = state;
...@@ -1412,6 +1425,13 @@ void DebuggerEngine::setState(DebuggerState state, bool forced) ...@@ -1412,6 +1425,13 @@ void DebuggerEngine::setState(DebuggerState state, bool forced)
showMessage(msg, LogDebug); showMessage(msg, LogDebug);
plugin()->updateState(this); plugin()->updateState(this);
emit stateChanged(d->m_state);
}
void DebuggerEngine::setRunInWrapperEngine(bool value)
{
d->m_runInWrapperEngine = value;
} }
bool DebuggerEngine::debuggerActionsEnabled() const bool DebuggerEngine::debuggerActionsEnabled() const
...@@ -1528,6 +1548,11 @@ QMessageBox *DebuggerEngine::showMessageBox(int icon, const QString &title, ...@@ -1528,6 +1548,11 @@ QMessageBox *DebuggerEngine::showMessageBox(int icon, const QString &title,
return plugin()->showMessageBox(icon, title, text, buttons); return plugin()->showMessageBox(icon, title, text, buttons);
} }
DebuggerRunControl *DebuggerEngine::runControl() const
{
return d->m_runControl;
}
} // namespace Internal } // namespace Internal
} // namespace Debugger } // namespace Debugger
......
...@@ -79,6 +79,7 @@ public: ...@@ -79,6 +79,7 @@ public:
// for qml debugging // for qml debugging
QString qmlServerAddress; QString qmlServerAddress;
quint16 qmlServerPort; quint16 qmlServerPort;
DebuggerEngineType cppEngineType; // for cpp+qml debugging
// for remote debugging // for remote debugging
QString remoteChannel; QString remoteChannel;
...@@ -218,17 +219,17 @@ public: ...@@ -218,17 +219,17 @@ public:
WatchHandler *watchHandler() const; WatchHandler *watchHandler() const;
SourceFilesHandler *sourceFilesHandler() const; SourceFilesHandler *sourceFilesHandler() const;
QAbstractItemModel *commandModel() const; virtual QAbstractItemModel *commandModel() const;
QAbstractItemModel *modulesModel() const; virtual QAbstractItemModel *modulesModel() const;
QAbstractItemModel *breakModel() const; virtual QAbstractItemModel *breakModel() const;
QAbstractItemModel *registerModel() const; virtual QAbstractItemModel *registerModel() const;
QAbstractItemModel *stackModel() const; virtual QAbstractItemModel *stackModel() const;
QAbstractItemModel *threadsModel() const; virtual QAbstractItemModel *threadsModel() const;
QAbstractItemModel *localsModel() const; virtual QAbstractItemModel *localsModel() const;
QAbstractItemModel *watchersModel() const; virtual QAbstractItemModel *watchersModel() const;
QAbstractItemModel *returnModel() const; virtual QAbstractItemModel *returnModel() const;
//QAbstractItemModel *snapshotModel() const; //QAbstractItemModel *snapshotModel() const;
QAbstractItemModel *sourceFilesModel() const; virtual QAbstractItemModel *sourceFilesModel() const;
void progressPing(); void progressPing();
void handleFinished(); void handleFinished();
...@@ -275,6 +276,9 @@ public: ...@@ -275,6 +276,9 @@ public:
void gotoLocation(const StackFrame &frame, bool setMarker); void gotoLocation(const StackFrame &frame, bool setMarker);
virtual void quitDebugger(); // called by DebuggerRunControl virtual void quitDebugger(); // called by DebuggerRunControl
signals:
void stateChanged(const DebuggerState &state);
protected: protected:
// The base notify*() function implementation should be sufficient // The base notify*() function implementation should be sufficient
// in most cases, but engines are free to override them to do some // in most cases, but engines are free to override them to do some
...@@ -318,8 +322,11 @@ protected: ...@@ -318,8 +322,11 @@ protected:
virtual void shutdownInferior() = 0; virtual void shutdownInferior() = 0;
virtual void shutdownEngine() = 0; virtual void shutdownEngine() = 0;
private:
void setState(DebuggerState state, bool forced = false); void setState(DebuggerState state, bool forced = false);
void setRunInWrapperEngine(bool value);
private:
DebuggerRunControl *runControl() const;
private: private:
void executeRunToLine(); void executeRunToLine();
...@@ -327,6 +334,9 @@ private: ...@@ -327,6 +334,9 @@ private:
void executeJumpToLine(); void executeJumpToLine();
void addToWatchWindow(); void addToWatchWindow();
// wrapper engine needs access to state of its subengines
friend class QmlCppEngine;
friend class DebuggerEnginePrivate; friend class DebuggerEnginePrivate;
DebuggerEnginePrivate *d; DebuggerEnginePrivate *d;
}; };
......
...@@ -71,9 +71,7 @@ QMenu* DebuggerMainWindow::createPopupMenu() ...@@ -71,9 +71,7 @@ QMenu* DebuggerMainWindow::createPopupMenu()
for (int i = 0; i < dockwidgets.size(); ++i) { for (int i = 0; i < dockwidgets.size(); ++i) {
QDockWidget *dockWidget = dockwidgets.at(i)->m_dockWidget; QDockWidget *dockWidget = dockwidgets.at(i)->m_dockWidget;
if (dockWidget->parentWidget() == this && if (dockWidget->parentWidget() == this) {
dockwidgets.at(i)->m_languageId == m_uiSwitcher->activeLanguageId()) {
menu->addAction(dockWidget->toggleViewAction()); menu->addAction(dockWidget->toggleViewAction());
} }
} }
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#define DEBUGGERMAINWINDOW_H #define DEBUGGERMAINWINDOW_H
#include <utils/fancymainwindow.h> #include <utils/fancymainwindow.h>
#include "debuggerconstants.h"
QT_FORWARD_DECLARE_CLASS(QMenu); QT_FORWARD_DECLARE_CLASS(QMenu);
...@@ -42,10 +43,9 @@ namespace Internal { ...@@ -42,10 +43,9 @@ namespace Internal {
class DebugToolWindow class DebugToolWindow
{ {
public: public:
DebugToolWindow() : m_dockWidget(0), m_languageId(-1), m_visible(false) {} DebugToolWindow() : m_dockWidget(0), m_visible(false) {}
QDockWidget *m_dockWidget; QDockWidget *m_dockWidget;
int m_languageId;
bool m_visible; bool m_visible;
}; };
......
This diff is collapsed.
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#define DEBUGGERPLUGIN_H #define DEBUGGERPLUGIN_H
#include "debugger_global.h" #include "debugger_global.h"
#include "debuggerconstants.h"
#include <extensionsystem/iplugin.h> #include <extensionsystem/iplugin.h>
...@@ -73,6 +74,7 @@ public: ...@@ -73,6 +74,7 @@ public:
ProjectExplorer::RunConfiguration *rc = 0); ProjectExplorer::RunConfiguration *rc = 0);
static void startDebugger(ProjectExplorer::RunControl *runControl); static void startDebugger(ProjectExplorer::RunControl *runControl);
static void displayDebugger(ProjectExplorer::RunControl *runControl); static void displayDebugger(ProjectExplorer::RunControl *runControl);
static void displayDebugger(Internal::DebuggerEngine *engine, bool updateEngine = true);
QVariant sessionValue(const QString &name); QVariant sessionValue(const QString &name);
void setSessionValue(const QString &name, const QVariant &value); void setSessionValue(const QString &name, const QVariant &value);
...@@ -110,6 +112,7 @@ private: ...@@ -110,6 +112,7 @@ private:
void createNewDock(QWidget *widget); void createNewDock(QWidget *widget);
void runControlStarted(DebuggerRunControl *runControl); void runControlStarted(DebuggerRunControl *runControl);
void runControlFinished(DebuggerRunControl *runControl); void runControlFinished(DebuggerRunControl *runControl);
DebuggerLanguages activeLanguages() const;
// This contains per-session data like breakpoints and watched // This contains per-session data like breakpoints and watched
// expression. It serves as a template for new engine instantiations. // expression. It serves as a template for new engine instantiations.
......
...@@ -43,6 +43,7 @@ ...@@ -43,6 +43,7 @@
#include <projectexplorer/debugginghelper.h> #include <projectexplorer/debugginghelper.h>
#include <projectexplorer/environment.h> #include <projectexplorer/environment.h>
#include <projectexplorer/project.h> #include <projectexplorer/project.h>
#include <projectexplorer/projectexplorer.h>
#include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/target.h> #include <projectexplorer/target.h>
#include <projectexplorer/buildconfiguration.h> #include <projectexplorer/buildconfiguration.h>
...@@ -74,6 +75,7 @@ DebuggerEngine *createScriptEngine(const DebuggerStartParameters &); ...@@ -74,6 +75,7 @@ DebuggerEngine *createScriptEngine(const DebuggerStartParameters &);
DebuggerEngine *createPdbEngine(const DebuggerStartParameters &); DebuggerEngine *createPdbEngine(const DebuggerStartParameters &);
DebuggerEngine *createTcfEngine(const DebuggerStartParameters &); DebuggerEngine *createTcfEngine(const DebuggerStartParameters &);
DebuggerEngine *createQmlEngine(const DebuggerStartParameters &); DebuggerEngine *createQmlEngine(const DebuggerStartParameters &);
DebuggerEngine *createQmlCppEngine(const DebuggerStartParameters &);
bool checkGdbConfiguration(int toolChain, QString *errorMsg, QString *settingsPage); bool checkGdbConfiguration(int toolChain, QString *errorMsg, QString *settingsPage);
...@@ -148,6 +150,17 @@ static DebuggerStartParameters localStartParameters(RunConfiguration *runConfigu ...@@ -148,6 +150,17 @@ static DebuggerStartParameters localStartParameters(RunConfiguration *runConfigu
sp.useTerminal = rc->runMode() == LocalApplicationRunConfiguration::Console; sp.useTerminal = rc->runMode() == LocalApplicationRunConfiguration::Console;
sp.dumperLibrary = rc->dumperLibrary(); sp.dumperLibrary = rc->dumperLibrary();
sp.dumperLibraryLocations = rc->dumperLibraryLocations(); sp.dumperLibraryLocations = rc->dumperLibraryLocations();
if (DebuggerRunControl::isQmlProject(runConfiguration)) {
sp.qmlServerAddress = QLatin1String("127.0.0.1");
sp.qmlServerPort = rc->environment().value("QML_DEBUG_SERVER_PORT").toUInt();
if (sp.qmlServerPort == 0)
sp.qmlServerPort = Constants::QML_DEFAULT_DEBUG_SERVER_PORT;
sp.environment << QString(Constants::E_QML_DEBUG_SERVER_PORT)
+ QLatin1Char('=') + QString::number(sp.qmlServerPort);
}
// FIXME: If it's not yet build this will be empty and not filled // FIXME: If it's not yet build this will be empty and not filled
// when rebuild as the runConfiguration is not stored and therefore // when rebuild as the runConfiguration is not stored and therefore
// cannot be used to retrieve the dumper location. // cannot be used to retrieve the dumper location.
...@@ -208,14 +221,15 @@ QWidget *DebuggerRunControlFactory::createConfigurationWidget ...@@ -208,14 +221,15 @@ QWidget *DebuggerRunControlFactory::createConfigurationWidget
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
DebuggerRunControl::DebuggerRunControl(RunConfiguration *runConfiguration, DebuggerRunControl::DebuggerRunControl(RunConfiguration *runConfiguration,
DebuggerEngineType enabledEngines, const DebuggerStartParameters &sp) : DebuggerEngineType enabledEngines, const DebuggerStartParameters &sp)
RunControl(runConfiguration, ProjectExplorer::Constants::DEBUGMODE), : RunControl(runConfiguration, ProjectExplorer::Constants::DEBUGMODE)
m_engine(0), , m_myRunConfiguration(runConfiguration)
m_myRunConfiguration(runConfiguration), , m_running(false)
m_running(false), , m_started(false)
m_enabledEngines(enabledEngines)