Debugger: Introduce debuggerRecipe()

Task-number: QTCREATORBUG-29168
Change-Id: I888ae42672522af69434590dd4b6610971a41b6f
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Jarek Kobus
2025-04-16 16:48:28 +02:00
parent 7cb620c273
commit bff24daa8b
2 changed files with 55 additions and 0 deletions

View File

@@ -785,6 +785,56 @@ void DebuggerRunTool::start()
});
}
Group debuggerRecipe(RunControl *runControl, const DebuggerRunParameters &initialParameters,
const std::function<void(DebuggerRunParameters &)> &parametersModifier)
{
const Storage<DebuggerRunParameters> parametersStorage{initialParameters};
const Storage<EnginesDriver> driverStorage;
const Storage<FilePath> tempCoreFileStorage;
const Storage<std::unique_ptr<Process>> terminalStorage;
const auto onSetup = [runControl, parametersStorage, parametersModifier] {
parametersStorage->setAttachPid(runControl->attachPid());
if (parametersModifier)
parametersModifier(*parametersStorage);
};
const auto terminalKicker = [parametersStorage, driverStorage, terminalStorage](const SingleBarrier &barrier) {
return terminalRecipe(parametersStorage, driverStorage, terminalStorage, barrier);
};
const auto debugServerKicker = [runControl, parametersStorage](const SingleBarrier &barrier) {
return debugServerRecipe(runControl, parametersStorage, barrier);
};
const auto onDone = [parametersStorage, tempCoreFileStorage] {
if (tempCoreFileStorage->exists())
tempCoreFileStorage->removeFile();
if (parametersStorage->isSnapshot() && !parametersStorage->coreFile().isEmpty())
parametersStorage->coreFile().removeFile();
};
return {
parametersStorage,
driverStorage,
terminalStorage,
tempCoreFileStorage,
continueOnError,
onGroupSetup(onSetup),
Group {
coreFileRecipe(runControl, parametersStorage, tempCoreFileStorage),
When (terminalKicker) >> Do {
fixupParamsRecipe(runControl, parametersStorage),
When (debugServerKicker) >> Do {
startEnginesRecipe(runControl, parametersStorage, driverStorage)
}
}
}.withCancel(canceler()),
finalizeRecipe(driverStorage, terminalStorage),
onGroupDone(onDone)
};
}
void DebuggerRunTool::stop()
{
if (!d->m_taskTreeRunner.isRunning())

View File

@@ -14,6 +14,11 @@ namespace Debugger {
namespace Internal { class DebuggerRunToolPrivate; }
DEBUGGER_EXPORT Tasking::Group debuggerRecipe(
ProjectExplorer::RunControl *runControl,
const DebuggerRunParameters &initialParameters,
const std::function<void(DebuggerRunParameters &)> &parametersModifier = {});
class DEBUGGER_EXPORT DebuggerRunTool final : public ProjectExplorer::RunWorker
{
Q_OBJECT