Debugger: Transform DebuggerRunParameters::coreFile

Make a separate setter/getter for isSnapshot.

Task-number: QTCREATORBUG-29168
Change-Id: Iebcf4a4e988b0c90c46399e8799a4cf8c25ab100
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Jarek Kobus
2025-01-13 10:17:48 +01:00
parent 88b342e9bd
commit 17638333b9
10 changed files with 29 additions and 30 deletions

View File

@@ -377,7 +377,7 @@ void CdbEngine::setupEngine()
}
break;
case AttachToCore:
debugger.addArgs({"-z", sp.coreFile.path()});
debugger.addArgs({"-z", sp.coreFile().path()});
break;
default:
handleSetupFailure(QString("Internal error: Unsupported start mode %1.").arg(sp.startMode()));

View File

@@ -109,7 +109,7 @@ QDebug operator<<(QDebug str, const DebuggerRunParameters &rp)
{
QDebug nospace = str.nospace();
nospace << "executable=" << rp.inferior().command.executable()
<< " coreFile=" << rp.coreFile
<< " coreFile=" << rp.coreFile()
<< " processArgs=" << rp.inferior().command.arguments()
<< " inferior environment=<" << rp.inferior().environment.toStringList().size() << " variables>"
<< " debugger environment=<" << rp.debugger.environment.toStringList().size() << " variables>"
@@ -2912,8 +2912,8 @@ QString DebuggerEngine::formatStartParameters() const
}
if (!rp.debugger.command.isEmpty())
str << "Debugger: " << rp.debugger.command.toUserOutput() << '\n';
if (!rp.coreFile.isEmpty())
str << "Core: " << rp.coreFile.toUserOutput() << '\n';
if (!rp.coreFile().isEmpty())
str << "Core: " << rp.coreFile().toUserOutput() << '\n';
if (rp.attachPid().isValid())
str << "PID: " << rp.attachPid().pid() << ' ' << rp.crashParameter << '\n';
if (!rp.projectSourceDirectory.isEmpty()) {

View File

@@ -170,8 +170,11 @@ public:
void setDeviceUuid(const QString &uuid) { m_deviceUuid = uuid; }
QString deviceUuid() const { return m_deviceUuid; }
// Used by general core file debugging. Public access requested in QTCREATORBUG-17158.
Utils::FilePath coreFile;
void setCoreFilePath(const Utils::FilePath &coreFile) { m_coreFile = coreFile; }
Utils::FilePath coreFile() const { return m_coreFile; }
void setSnapshot(bool isSnapshot) { m_isSnapshot = isSnapshot; }
bool isSnapshot() const { return m_isSnapshot; }
// Macro-expanded and passed to debugger startup.
QString additionalStartupCommands;
@@ -191,7 +194,6 @@ public:
Utils::FilePath debugInfoLocation; // Gdb "set-debug-file-directory".
QStringList debugSourceLocation; // Gdb "directory"
Utils::FilePath qtSourceLocation;
bool isSnapshot = false; // Set if created internally.
ProjectExplorer::Abi toolChainAbi;
Utils::FilePath projectSourceDirectory;
@@ -273,6 +275,10 @@ private:
Utils::FilePath m_sysRoot;
QString m_deviceUuid; // iOS 17+
// Used by general core file debugging. Public access requested in QTCREATORBUG-17158.
Utils::FilePath m_coreFile;
bool m_isSnapshot = false; // Set if created internally.
};
namespace Internal {

View File

@@ -1411,7 +1411,7 @@ bool DebuggerPluginPrivate::parseArgument(QStringList::const_iterator &it,
} else if (startMode == AttachToCore) {
rp.setStartMode(AttachToCore);
rp.setCloseMode(DetachAtClose);
debugger->setCoreFilePath(coreFile);
rp.setCoreFilePath(coreFile);
rp.setDisplayName(Tr::tr("Core file \"%1\"").arg(coreFile.toUserOutput()));
debugger->setStartMessage(Tr::tr("Attaching to core file %1.").arg(coreFile.toUserOutput()));
} else {
@@ -1625,7 +1625,7 @@ void DebuggerPluginPrivate::attachToLastCore()
auto debugger = new DebuggerRunTool(runControl);
DebuggerRunParameters &rp = debugger->runParameters();
rp.setInferiorExecutable(lastCore.binary);
debugger->setCoreFilePath(lastCore.coreFile);
rp.setCoreFilePath(lastCore.coreFile);
rp.setStartMode(AttachToCore);
rp.setCloseMode(DetachAtClose);

View File

@@ -138,12 +138,6 @@ void DebuggerRunTool::setStartMessage(const QString &msg)
m_runParameters.startMessage = msg;
}
void DebuggerRunTool::setCoreFilePath(const FilePath &coreFile, bool isSnapshot)
{
m_runParameters.coreFile = coreFile;
m_runParameters.isSnapshot = isSnapshot;
}
void DebuggerRunTool::addQmlServerInferiorCommandLineArgumentIfNeeded()
{
d->addQmlServerInferiorCommandLineArgumentIfNeeded = true;
@@ -166,7 +160,7 @@ void DebuggerRunTool::start()
void DebuggerRunTool::startCoreFileSetupIfNeededAndContinueStartup()
{
const FilePath coreFile = m_runParameters.coreFile;
const FilePath coreFile = m_runParameters.coreFile();
if (!coreFile.endsWith(".gz") && !coreFile.endsWith(".lzo")) {
continueAfterCoreFileSetup();
return;
@@ -181,11 +175,11 @@ void DebuggerRunTool::startCoreFileSetupIfNeededAndContinueStartup()
d->m_coreUnpackProcess.setWorkingDirectory(TemporaryDirectory::masterDirectoryFilePath());
connect(&d->m_coreUnpackProcess, &Process::done, this, [this] {
if (d->m_coreUnpackProcess.error() == QProcess::UnknownError) {
m_runParameters.coreFile = d->m_tempCoreFilePath;
m_runParameters.setCoreFilePath(d->m_tempCoreFilePath);
continueAfterCoreFileSetup();
return;
}
reportFailure("Error unpacking " + m_runParameters.coreFile.toUserOutput());
reportFailure("Error unpacking " + m_runParameters.coreFile().toUserOutput());
});
const QString msg = Tr::tr("Unpacking core file to %1");
@@ -441,7 +435,8 @@ void DebuggerRunTool::continueAfterDebugServerStart()
rp.setStartMode(AttachToCore);
rp.setCloseMode(DetachAtClose);
rp.setDisplayName(name);
debugger->setCoreFilePath(FilePath::fromString(coreFile), true);
rp.setCoreFilePath(FilePath::fromString(coreFile));
rp.setSnapshot(true);
rc->start();
});
@@ -602,8 +597,8 @@ DebuggerRunTool::~DebuggerRunTool()
if (d->m_tempCoreFilePath.exists())
d->m_tempCoreFilePath.removeFile();
if (m_runParameters.isSnapshot && !m_runParameters.coreFile.isEmpty())
m_runParameters.coreFile.removeFile();
if (m_runParameters.isSnapshot() && !m_runParameters.coreFile().isEmpty())
m_runParameters.coreFile().removeFile();
qDeleteAll(m_engines);
m_engines.clear();

View File

@@ -39,8 +39,6 @@ public:
void setDebugInfoLocation(const Utils::FilePath &debugInfoLocation);
void setCoreFilePath(const Utils::FilePath &core, bool isSnapshot = false);
void setTestCase(int testCase);
void setOverrideStartScript(const Utils::FilePath &script);

View File

@@ -353,7 +353,7 @@ QVariant EngineItem::data(int column, int role) const
return myName;
}
case 1:
return (rp.coreFile.isEmpty() ? rp.inferior().command.executable() : rp.coreFile).toUserOutput();
return (rp.coreFile().isEmpty() ? rp.inferior().command.executable() : rp.coreFile()).toUserOutput();
}
return QVariant();

View File

@@ -4524,7 +4524,7 @@ void GdbEngine::setupInferior()
FilePath executable = rp.inferior().command.executable();
if (executable.isEmpty()) {
CoreInfo cinfo = CoreInfo::readExecutableNameFromCore(rp.debugger, rp.coreFile);
CoreInfo cinfo = CoreInfo::readExecutableNameFromCore(rp.debugger, rp.coreFile());
if (!cinfo.isCore) {
AsynchronousMessageBox::warning(Tr::tr("Error Loading Core File"),
@@ -4626,7 +4626,7 @@ void GdbEngine::runEngine()
} else if (isCoreEngine()) {
claimInitialBreakpoints();
runCommand({"target core " + runParameters().coreFile.path(), CB(handleTargetCore)});
runCommand({"target core " + runParameters().coreFile().path(), CB(handleTargetCore)});
} else if (isTermEngine()) {
@@ -4802,7 +4802,7 @@ void GdbEngine::handleFileExecAndSymbols(const DebuggerResponse &response)
} else if (isCoreEngine()) {
const FilePath core = runParameters().coreFile;
const FilePath core = runParameters().coreFile();
if (response.resultClass == ResultDone) {
showMessage(Tr::tr("Symbols found."), StatusBar);
handleInferiorPrepared();
@@ -5128,7 +5128,7 @@ void GdbEngine::handleTargetCore(const DebuggerResponse &response)
// Even without the stack, the user can find interesting stuff by exploring
// the memory, globals etc.
showStatusMessage(
Tr::tr("Attach to core \"%1\" failed:").arg(runParameters().coreFile.toUserOutput())
Tr::tr("Attach to core \"%1\" failed:").arg(runParameters().coreFile().toUserOutput())
+ '\n' + response.data["msg"].data() + '\n' + Tr::tr("Continuing nevertheless."));
}
// Due to the auto-solib-add off setting, we don't have any

View File

@@ -359,7 +359,7 @@ void LldbEngine::runEngine()
showStatusMessage(Tr::tr("Running requested..."), 5000);
DebuggerCommand cmd("runEngine");
if (rp.startMode() == AttachToCore)
cmd.arg("coreFile", rp.coreFile.path());
cmd.arg("coreFile", rp.coreFile().path());
runCommand(cmd);
}

View File

@@ -352,7 +352,7 @@ void runAttachToCoreDialog()
auto debugger = new DebuggerRunTool(runControl);
DebuggerRunParameters &rp = debugger->runParameters();
rp.setInferiorExecutable(dlg.symbolFileCopy());
debugger->setCoreFilePath(dlg.coreFileCopy());
rp.setCoreFilePath(dlg.coreFileCopy());
rp.setStartMode(AttachToCore);
rp.setCloseMode(DetachAtClose);
debugger->setOverrideStartScript(dlg.overrideStartScript());