Debugger: Fix editing breakpoints via breakpoints view

As the comment for the 'm_parameters' member
in the 'BreakpointItem' class says, that member is
supposed to hold the "Parameters acknowledged by engine",
which the parameters newly set in the dialog are not
yet at this point in time.

Therefore, if a global breakpoint exists, apply the
new parameters there, so they are considered as pending
changes (also returned by 'Breakpoint::requestedParameters')
when 'BreakHandler::requestBreakpointUpdate' is
called a few lines below, and new values get applied
properly.

Task-number: QTCREATORBUG-25035
Change-Id: I8bfd9123785ee911ff180d8311fa2559b55be580
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Michael Weghorn
2020-12-02 16:27:10 +01:00
parent 37ed5cc5e5
commit 7cded0af3f
2 changed files with 28 additions and 4 deletions

View File

@@ -1724,7 +1724,11 @@ void BreakHandler::editBreakpoint(const Breakpoint &bp, QWidget *parent)
return; return;
if (params != bp->requestedParameters()) { if (params != bp->requestedParameters()) {
if (GlobalBreakpoint gbp = bp->globalBreakpoint()) {
gbp->setParameters(params);
} else {
bp->setParameters(params); bp->setParameters(params);
}
updateDisassemblerMarker(bp); updateDisassemblerMarker(bp);
bp->updateMarker(); bp->updateMarker();
bp->update(); bp->update();
@@ -1761,9 +1765,18 @@ void BreakHandler::editBreakpoints(const Breakpoints &bps, QWidget *parent)
for (Breakpoint bp : bps) { for (Breakpoint bp : bps) {
if (bp) { if (bp) {
if (GlobalBreakpoint gbp = bp->globalBreakpoint()) {
BreakpointParameters params = bp->requestedParameters();
params.condition = newCondition;
params.ignoreCount = newIgnoreCount;
params.threadSpec = newThreadSpec;
gbp->setParameters(params);
} else {
bp->m_parameters.condition = newCondition; bp->m_parameters.condition = newCondition;
bp->m_parameters.ignoreCount = newIgnoreCount; bp->m_parameters.ignoreCount = newIgnoreCount;
bp->m_parameters.threadSpec = newThreadSpec; bp->m_parameters.threadSpec = newThreadSpec;
}
if (bp->m_state != BreakpointNew) if (bp->m_state != BreakpointNew)
requestBreakpointUpdate(bp); requestBreakpointUpdate(bp);
} }
@@ -2312,6 +2325,16 @@ void GlobalBreakpointItem::setEnabled(bool enabled, bool descend)
} }
} }
void GlobalBreakpointItem::setParameters(const BreakpointParameters &params)
{
if (m_params != params) {
m_params = params;
if (m_marker)
m_marker->updateMarker();
update();
}
}
void GlobalBreakpointItem::destroyMarker() void GlobalBreakpointItem::destroyMarker()
{ {
delete m_marker; delete m_marker;

View File

@@ -86,6 +86,7 @@ public:
bool isEnabled() const { return m_params.enabled; } bool isEnabled() const { return m_params.enabled; }
void setEnabled(bool enabled, bool descend = true); void setEnabled(bool enabled, bool descend = true);
void setParameters(const BreakpointParameters &params);
const BreakpointParameters &requestedParameters() const { return m_params; } const BreakpointParameters &requestedParameters() const { return m_params; }