aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/debugger/debuggerrunner.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <[email protected]>2012-09-05 14:56:08 +0200
committerFriedemann Kleint <[email protected]>2012-09-05 15:49:11 +0200
commitaf6bbc442ecb60d2ddcb37752215f6a2e3e5bea4 (patch)
tree1819ebb9f2fea4bdbb30e96c2783c6508ebc5726 /src/plugins/debugger/debuggerrunner.cpp
parent824d04252e1c2d461dadc09c657d2c896b0c74ad (diff)
Add debugger engine type to configuration.
Introduce a struct DebuggerItem as a debugger configuration item, containing debugger engine type and binary. Store information as a variant map. Add a combo box. Remove engine guessing logic. Parts of it are still required when checking the suggested debugger from the SDK. Split error checking to be able to do a quick error check and find only valid profiles in the matchers. Pass on errors up to RunControl::create(). Change-Id: I08653e2a76ca2c371701082f8173b0b8f8ed462e Reviewed-by: Tobias Hunger <[email protected]>
Diffstat (limited to 'src/plugins/debugger/debuggerrunner.cpp')
-rw-r--r--src/plugins/debugger/debuggerrunner.cpp87
1 files changed, 16 insertions, 71 deletions
diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp
index 476d23e3acc..e0ddc0122a3 100644
--- a/src/plugins/debugger/debuggerrunner.cpp
+++ b/src/plugins/debugger/debuggerrunner.cpp
@@ -259,11 +259,6 @@ public:
explicit DebuggerRunControlPrivate(DebuggerRunControl *parent,
RunConfiguration *runConfiguration);
- DebuggerEngineType engineForExecutable(unsigned enabledEngineTypes,
- const QString &executable);
- DebuggerEngineType engineForMode(unsigned enabledEngineTypes,
- DebuggerStartMode mode);
-
public:
DebuggerRunControl *q;
DebuggerEngine *m_engine;
@@ -476,7 +471,7 @@ QString DebuggerRunControlFactory::displayName() const
return DebuggerPlugin::tr("Debug");
}
-static DebuggerStartParameters localStartParameters(RunConfiguration *runConfiguration)
+static DebuggerStartParameters localStartParameters(RunConfiguration *runConfiguration, QString *errorMessage)
{
DebuggerStartParameters sp;
QTC_ASSERT(runConfiguration, return sp);
@@ -486,7 +481,8 @@ static DebuggerStartParameters localStartParameters(RunConfiguration *runConfigu
Target *target = runConfiguration->target();
Kit *kit = target ? target->kit() : KitManager::instance()->defaultKit();
- fillParameters(&sp, kit);
+ if (!fillParameters(&sp, kit, errorMessage))
+ return sp;
sp.environment = rc->environment();
sp.workingDirectory = rc->workingDirectory();
@@ -547,7 +543,7 @@ RunControl *DebuggerRunControlFactory::create
{
Q_UNUSED(errorMessage)
QTC_ASSERT(mode == DebugRunMode || mode == DebugRunModeWithBreakOnMain, return 0);
- DebuggerStartParameters sp = localStartParameters(runConfiguration);
+ DebuggerStartParameters sp = localStartParameters(runConfiguration, errorMessage);
if (sp.startMode == NoStartMode)
return 0;
if (mode == DebugRunModeWithBreakOnMain)
@@ -556,92 +552,43 @@ RunControl *DebuggerRunControlFactory::create
return doCreate(sp, runConfiguration, errorMessage);
}
-static DebuggerEngineType guessUnixCppEngineType(const DebuggerStartParameters &sp)
-{
- if (sp.debuggerCommand.contains(QLatin1String("lldb")))
- return LldbEngineType;
- return GdbEngineType;
-}
-
-static DebuggerEngineType guessCppEngineTypeForAbi(const DebuggerStartParameters &sp, const Abi &abi)
-{
- switch (abi.binaryFormat()) {
- case Abi::ElfFormat:
- case Abi::MachOFormat:
- return guessUnixCppEngineType(sp) ;
- case Abi::PEFormat:
- if (abi.osFlavor() == Abi::WindowsMSysFlavor)
- return guessUnixCppEngineType(sp);
- return CdbEngineType;
- default:
- break;
- }
- return NoEngineType;
-}
-
-static DebuggerEngineType guessCppEngineType(const DebuggerStartParameters &sp)
-{
- if (sp.toolChainAbi.isValid()) {
- const DebuggerEngineType et = guessCppEngineTypeForAbi(sp, sp.toolChainAbi);
- if (et != NoEngineType)
- return et;
- }
-
- #ifdef Q_OS_WIN
- // If a file has PDB files, it has been compiled by VS.
- if (sp.executable.endsWith(_(".exe"), Qt::CaseInsensitive)) {
- QStringList pdbFiles;
- QString errorMessage;
- if (getPDBFiles(sp.executable, &pdbFiles, &errorMessage) && !pdbFiles.isEmpty())
- return CdbEngineType;
- }
- #endif
-
- QList<Abi> abis = Abi::abisOfBinary(FileName::fromString(sp.executable));
- foreach (const Abi &abi, abis) {
- DebuggerEngineType et = guessCppEngineTypeForAbi(sp, abi);
- if (et != NoEngineType)
- return et;
- }
-
- return guessUnixCppEngineType(sp);
-}
-
-static void fixupEngineTypes(DebuggerStartParameters &sp, RunConfiguration *rc)
+static bool fixupEngineTypes(DebuggerStartParameters &sp, RunConfiguration *rc, QString *errorMessage)
{
if (sp.masterEngineType != NoEngineType)
- return;
+ return true;
if (sp.executable.endsWith(_(".js"))) {
sp.masterEngineType = ScriptEngineType;
- return;
+ return true;
}
if (sp.executable.endsWith(_(".py"))) {
sp.masterEngineType = PdbEngineType;
- return;
+ return true;
}
if (rc) {
DebuggerRunConfigurationAspect *aspect = rc->debuggerAspect();
if (const Target *target = rc->target())
- fillParameters(&sp, target->kit());
+ if (!fillParameters(&sp, target->kit(), errorMessage))
+ return false;
const bool useCppDebugger = aspect->useCppDebugger();
const bool useQmlDebugger = aspect->useQmlDebugger();
if (useQmlDebugger) {
if (useCppDebugger) {
sp.masterEngineType = QmlCppEngineType;
- sp.firstSlaveEngineType = guessCppEngineType(sp);
+ sp.firstSlaveEngineType = sp.cppEngineType;
sp.secondSlaveEngineType = QmlCppEngineType;
} else {
sp.masterEngineType = QmlEngineType;
}
} else {
- sp.masterEngineType = guessCppEngineType(sp);
+ sp.masterEngineType = sp.cppEngineType;
}
- return;
+ return true;
}
- sp.masterEngineType = guessCppEngineType(sp);
+ sp.masterEngineType = sp.cppEngineType;
+ return true;
}
DebuggerRunControl *DebuggerRunControlFactory::doCreate
@@ -664,10 +611,8 @@ DebuggerRunControl *DebuggerRunControlFactory::doCreate
}
}
- fixupEngineTypes(sp, rc);
- if (!sp.masterEngineType) {
+ if (!fixupEngineTypes(sp, rc, errorMessage))
return 0;
- }
return new DebuggerRunControl(rc, sp);
}