From 7cded0af3f313f0b8c5caebe330671444a86811a Mon Sep 17 00:00:00 2001 From: Michael Weghorn Date: Wed, 2 Dec 2020 16:27:10 +0100 Subject: [PATCH] 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 --- src/plugins/debugger/breakhandler.cpp | 31 +++++++++++++++++++++++---- src/plugins/debugger/breakhandler.h | 1 + 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp index 5964c68ab64..491efd90533 100644 --- a/src/plugins/debugger/breakhandler.cpp +++ b/src/plugins/debugger/breakhandler.cpp @@ -1724,7 +1724,11 @@ void BreakHandler::editBreakpoint(const Breakpoint &bp, QWidget *parent) return; if (params != bp->requestedParameters()) { - bp->setParameters(params); + if (GlobalBreakpoint gbp = bp->globalBreakpoint()) { + gbp->setParameters(params); + } else { + bp->setParameters(params); + } updateDisassemblerMarker(bp); bp->updateMarker(); bp->update(); @@ -1761,9 +1765,18 @@ void BreakHandler::editBreakpoints(const Breakpoints &bps, QWidget *parent) for (Breakpoint bp : bps) { if (bp) { - bp->m_parameters.condition = newCondition; - bp->m_parameters.ignoreCount = newIgnoreCount; - bp->m_parameters.threadSpec = newThreadSpec; + 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.ignoreCount = newIgnoreCount; + bp->m_parameters.threadSpec = newThreadSpec; + } + if (bp->m_state != BreakpointNew) requestBreakpointUpdate(bp); } @@ -2312,6 +2325,16 @@ void GlobalBreakpointItem::setEnabled(bool enabled, bool descend) } } +void GlobalBreakpointItem::setParameters(const BreakpointParameters ¶ms) +{ + if (m_params != params) { + m_params = params; + if (m_marker) + m_marker->updateMarker(); + update(); + } +} + void GlobalBreakpointItem::destroyMarker() { delete m_marker; diff --git a/src/plugins/debugger/breakhandler.h b/src/plugins/debugger/breakhandler.h index bd24d6263db..eee210fc896 100644 --- a/src/plugins/debugger/breakhandler.h +++ b/src/plugins/debugger/breakhandler.h @@ -86,6 +86,7 @@ public: bool isEnabled() const { return m_params.enabled; } void setEnabled(bool enabled, bool descend = true); + void setParameters(const BreakpointParameters ¶ms); const BreakpointParameters &requestedParameters() const { return m_params; }