forked from qt-creator/qt-creator
Debugger: Remove non-const access to RunParameters
The idea is that they shouldn't change after start() to be re-usable for an additional run later. Change-Id: I272fc975657b0d8b5b13a07d58bd0b626868d32e Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -533,14 +533,11 @@ void DebuggerEngine::start()
|
|||||||
fp->setKeepOnFinish(FutureProgress::HideOnFinish);
|
fp->setKeepOnFinish(FutureProgress::HideOnFinish);
|
||||||
d->m_progress.reportStarted();
|
d->m_progress.reportStarted();
|
||||||
|
|
||||||
DebuggerRunParameters &rp = runParameters();
|
const DebuggerRunParameters &rp = runParameters();
|
||||||
d->m_inferiorPid = rp.attachPID.isValid() ? rp.attachPID : ProcessHandle();
|
d->m_inferiorPid = rp.attachPID.isValid() ? rp.attachPID : ProcessHandle();
|
||||||
if (d->m_inferiorPid.isValid())
|
if (d->m_inferiorPid.isValid())
|
||||||
runControl()->setApplicationProcessHandle(d->m_inferiorPid);
|
runControl()->setApplicationProcessHandle(d->m_inferiorPid);
|
||||||
|
|
||||||
if (isNativeMixedActive())
|
|
||||||
rp.inferior.environment.set("QV4_FORCE_INTERPRETER", "1");
|
|
||||||
|
|
||||||
action(OperateByInstruction)->setEnabled(hasCapability(DisassemblerCapability));
|
action(OperateByInstruction)->setEnabled(hasCapability(DisassemblerCapability));
|
||||||
|
|
||||||
QTC_ASSERT(state() == DebuggerNotReady || state() == DebuggerFinished,
|
QTC_ASSERT(state() == DebuggerNotReady || state() == DebuggerFinished,
|
||||||
@@ -631,11 +628,6 @@ const DebuggerRunParameters &DebuggerEngine::runParameters() const
|
|||||||
return runTool()->runParameters();
|
return runTool()->runParameters();
|
||||||
}
|
}
|
||||||
|
|
||||||
DebuggerRunParameters &DebuggerEngine::runParameters()
|
|
||||||
{
|
|
||||||
return runTool()->runParameters();
|
|
||||||
}
|
|
||||||
|
|
||||||
DebuggerState DebuggerEngine::state() const
|
DebuggerState DebuggerEngine::state() const
|
||||||
{
|
{
|
||||||
return d->m_state;
|
return d->m_state;
|
||||||
@@ -728,7 +720,6 @@ void DebuggerEnginePrivate::doSetupEngine()
|
|||||||
{
|
{
|
||||||
m_engine->showMessage("CALL: SETUP ENGINE");
|
m_engine->showMessage("CALL: SETUP ENGINE");
|
||||||
QTC_ASSERT(state() == EngineSetupRequested, qDebug() << m_engine << state());
|
QTC_ASSERT(state() == EngineSetupRequested, qDebug() << m_engine << state());
|
||||||
m_engine->validateExecutable();
|
|
||||||
m_engine->setupEngine();
|
m_engine->setupEngine();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1754,42 +1745,30 @@ void DebuggerEngine::setStateDebugging(bool on)
|
|||||||
d->m_isStateDebugging = on;
|
d->m_isStateDebugging = on;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerEngine::validateExecutable()
|
void DebuggerRunParameters::validateExecutable()
|
||||||
{
|
{
|
||||||
DebuggerRunParameters *sp = &runParameters();
|
|
||||||
if (sp->skipExecutableValidation)
|
|
||||||
return;
|
|
||||||
if (!sp->isCppDebugging)
|
|
||||||
return;
|
|
||||||
|
|
||||||
QString symbolFile = sp->symbolFile;
|
|
||||||
if (symbolFile.isEmpty())
|
|
||||||
symbolFile = sp->inferior.executable;
|
|
||||||
if (symbolFile.isEmpty())
|
|
||||||
return;
|
|
||||||
|
|
||||||
const bool warnOnRelease = boolSetting(WarnOnReleaseBuilds);
|
const bool warnOnRelease = boolSetting(WarnOnReleaseBuilds);
|
||||||
bool warnOnInappropriateDebugger = false;
|
bool warnOnInappropriateDebugger = false;
|
||||||
QString detailedWarning;
|
QString detailedWarning;
|
||||||
switch (sp->toolChainAbi.binaryFormat()) {
|
switch (toolChainAbi.binaryFormat()) {
|
||||||
case Abi::PEFormat: {
|
case Abi::PEFormat: {
|
||||||
QString preferredDebugger;
|
QString preferredDebugger;
|
||||||
if (sp->toolChainAbi.osFlavor() == Abi::WindowsMSysFlavor) {
|
if (toolChainAbi.osFlavor() == Abi::WindowsMSysFlavor) {
|
||||||
if (sp->cppEngineType == CdbEngineType)
|
if (cppEngineType == CdbEngineType)
|
||||||
preferredDebugger = "GDB";
|
preferredDebugger = "GDB";
|
||||||
} else if (sp->cppEngineType != CdbEngineType) {
|
} else if (cppEngineType != CdbEngineType) {
|
||||||
// osFlavor() is MSVC, so the recommended debugger is CDB
|
// osFlavor() is MSVC, so the recommended debugger is CDB
|
||||||
preferredDebugger = "CDB";
|
preferredDebugger = "CDB";
|
||||||
}
|
}
|
||||||
if (!preferredDebugger.isEmpty()) {
|
if (!preferredDebugger.isEmpty()) {
|
||||||
warnOnInappropriateDebugger = true;
|
warnOnInappropriateDebugger = true;
|
||||||
detailedWarning = tr(
|
detailedWarning = DebuggerEngine::tr(
|
||||||
"The inferior is in the Portable Executable format.\n"
|
"The inferior is in the Portable Executable format.\n"
|
||||||
"Selecting %1 as debugger would improve the debugging "
|
"Selecting %1 as debugger would improve the debugging "
|
||||||
"experience for this binary format.").arg(preferredDebugger);
|
"experience for this binary format.").arg(preferredDebugger);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (warnOnRelease && sp->cppEngineType == CdbEngineType) {
|
if (warnOnRelease && cppEngineType == CdbEngineType) {
|
||||||
if (!symbolFile.endsWith(".exe", Qt::CaseInsensitive))
|
if (!symbolFile.endsWith(".exe", Qt::CaseInsensitive))
|
||||||
symbolFile.append(".exe");
|
symbolFile.append(".exe");
|
||||||
QString errorMessage;
|
QString errorMessage;
|
||||||
@@ -1806,9 +1785,9 @@ void DebuggerEngine::validateExecutable()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Abi::ElfFormat: {
|
case Abi::ElfFormat: {
|
||||||
if (sp->cppEngineType == CdbEngineType) {
|
if (cppEngineType == CdbEngineType) {
|
||||||
warnOnInappropriateDebugger = true;
|
warnOnInappropriateDebugger = true;
|
||||||
detailedWarning = tr(
|
detailedWarning = DebuggerEngine::tr(
|
||||||
"The inferior is in the ELF format.\n"
|
"The inferior is in the ELF format.\n"
|
||||||
"Selecting GDB or LLDB as debugger would improve the debugging "
|
"Selecting GDB or LLDB as debugger would improve the debugging "
|
||||||
"experience for this binary format.");
|
"experience for this binary format.");
|
||||||
@@ -1881,7 +1860,7 @@ void DebuggerEngine::validateExecutable()
|
|||||||
QRegExp exp = itExp->first;
|
QRegExp exp = itExp->first;
|
||||||
int index = exp.indexIn(string);
|
int index = exp.indexIn(string);
|
||||||
if (index != -1) {
|
if (index != -1) {
|
||||||
sp->sourcePathMap.insert(string.left(index) + exp.cap(1), itExp->second);
|
sourcePathMap.insert(string.left(index) + exp.cap(1), itExp->second);
|
||||||
found = true;
|
found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1900,8 +1879,9 @@ void DebuggerEngine::validateExecutable()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
foreach (const QByteArray &name, interesting) {
|
foreach (const QByteArray &name, interesting) {
|
||||||
const QString found = seen.contains(name) ? tr("Found.") : tr("Not found.");
|
const QString found = seen.contains(name) ? DebuggerEngine::tr("Found.")
|
||||||
detailedWarning.append('\n' + tr("Section %1: %2").arg(QString::fromUtf8(name)).arg(found));
|
: DebuggerEngine::tr("Not found.");
|
||||||
|
detailedWarning.append('\n' + DebuggerEngine::tr("Section %1: %2").arg(QString::fromUtf8(name)).arg(found));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1909,14 +1889,14 @@ void DebuggerEngine::validateExecutable()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (warnOnInappropriateDebugger) {
|
if (warnOnInappropriateDebugger) {
|
||||||
AsynchronousMessageBox::information(tr("Warning"),
|
AsynchronousMessageBox::information(DebuggerEngine::tr("Warning"),
|
||||||
tr("The selected debugger may be inappropriate for the inferior.\n"
|
DebuggerEngine::tr("The selected debugger may be inappropriate for the inferior.\n"
|
||||||
"Examining symbols and setting breakpoints by file name and line number "
|
"Examining symbols and setting breakpoints by file name and line number "
|
||||||
"may fail.\n")
|
"may fail.\n")
|
||||||
+ '\n' + detailedWarning);
|
+ '\n' + detailedWarning);
|
||||||
} else if (warnOnRelease) {
|
} else if (warnOnRelease) {
|
||||||
AsynchronousMessageBox::information(tr("Warning"),
|
AsynchronousMessageBox::information(DebuggerEngine::tr("Warning"),
|
||||||
tr("This does not seem to be a \"Debug\" build.\n"
|
DebuggerEngine::tr("This does not seem to be a \"Debug\" build.\n"
|
||||||
"Setting breakpoints by file name and line number may fail.")
|
"Setting breakpoints by file name and line number may fail.")
|
||||||
+ '\n' + detailedWarning);
|
+ '\n' + detailedWarning);
|
||||||
}
|
}
|
||||||
@@ -2011,10 +1991,8 @@ void DebuggerEngine::checkState(DebuggerState state, const char *file, int line)
|
|||||||
|
|
||||||
bool DebuggerEngine::isNativeMixedEnabled() const
|
bool DebuggerEngine::isNativeMixedEnabled() const
|
||||||
{
|
{
|
||||||
if (DebuggerRunTool *rt = runTool()) {
|
if (DebuggerRunTool *rt = runTool())
|
||||||
const DebuggerRunParameters &runParams = rt->runParameters();
|
return rt->runParameters().isNativeMixedDebugging();
|
||||||
return runParams.nativeMixedEnabled && runParams.isQmlDebugging;
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2033,6 +2011,11 @@ bool DebuggerEngine::isNativeMixedActiveFrame() const
|
|||||||
return frame.language == QmlLanguage;
|
return frame.language == QmlLanguage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool DebuggerRunParameters::isNativeMixedDebugging() const
|
||||||
|
{
|
||||||
|
return nativeMixedEnabled && isCppDebugging && isQmlDebugging;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
} // namespace Debugger
|
} // namespace Debugger
|
||||||
|
|
||||||
|
@@ -156,6 +156,9 @@ public:
|
|||||||
|
|
||||||
bool nativeMixedEnabled = false;
|
bool nativeMixedEnabled = false;
|
||||||
|
|
||||||
|
bool isNativeMixedDebugging() const;
|
||||||
|
void validateExecutable();
|
||||||
|
|
||||||
Utils::MacroExpander *macroExpander = 0;
|
Utils::MacroExpander *macroExpander = 0;
|
||||||
|
|
||||||
// For Debugger testing.
|
// For Debugger testing.
|
||||||
@@ -239,7 +242,7 @@ public:
|
|||||||
virtual ~DebuggerEngine();
|
virtual ~DebuggerEngine();
|
||||||
|
|
||||||
const DebuggerRunParameters &runParameters() const;
|
const DebuggerRunParameters &runParameters() const;
|
||||||
DebuggerRunParameters &runParameters();
|
|
||||||
virtual void setRunTool(DebuggerRunTool *runTool);
|
virtual void setRunTool(DebuggerRunTool *runTool);
|
||||||
DebuggerRunTool *runTool() const;
|
DebuggerRunTool *runTool() const;
|
||||||
|
|
||||||
@@ -471,8 +474,6 @@ protected:
|
|||||||
bool isStateDebugging() const;
|
bool isStateDebugging() const;
|
||||||
void setStateDebugging(bool on);
|
void setStateDebugging(bool on);
|
||||||
|
|
||||||
void validateExecutable();
|
|
||||||
|
|
||||||
virtual void setupSlaveInferior();
|
virtual void setupSlaveInferior();
|
||||||
virtual void setupSlaveEngine();
|
virtual void setupSlaveEngine();
|
||||||
virtual void runSlaveEngine();
|
virtual void runSlaveEngine();
|
||||||
|
@@ -728,6 +728,12 @@ bool DebuggerRunTool::fixupParameters()
|
|||||||
rp.useTerminal = false;
|
rp.useTerminal = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (rp.isNativeMixedDebugging())
|
||||||
|
rp.inferior.environment.set("QV4_FORCE_INTERPRETER", "1");
|
||||||
|
|
||||||
|
if (rp.isCppDebugging && !rp.skipExecutableValidation)
|
||||||
|
rp.validateExecutable();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user