From abd7ab2cd5b111175f58cb0e7422d63210298512 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 18 Nov 2010 16:16:23 +0100 Subject: [PATCH] debugger: fix some breakpoint state transitions in gdb engine --- src/plugins/debugger/breakhandler.cpp | 6 ++++++ src/plugins/debugger/breakhandler.h | 1 + src/plugins/debugger/gdb/gdbengine.cpp | 18 ++++++++++++++++-- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp index 370eb838ec4..ab309e696f8 100644 --- a/src/plugins/debugger/breakhandler.cpp +++ b/src/plugins/debugger/breakhandler.cpp @@ -678,6 +678,12 @@ void BreakHandler::notifyBreakpointRemoveFailed(BreakpointId id) cleanupBreakpoint(id); } +void BreakHandler::notifyBreakpointChangeProceeding(BreakpointId id) +{ + QTC_ASSERT(state(id) == BreakpointChangeRequested, /**/); + setState(id, BreakpointChangeProceeding); +} + void BreakHandler::notifyBreakpointChangeOk(BreakpointId id) { QTC_ASSERT(state(id) == BreakpointChangeProceeding, /**/); diff --git a/src/plugins/debugger/breakhandler.h b/src/plugins/debugger/breakhandler.h index c9ee8549b60..38d57053443 100644 --- a/src/plugins/debugger/breakhandler.h +++ b/src/plugins/debugger/breakhandler.h @@ -132,6 +132,7 @@ public: void notifyBreakpointInsertOk(BreakpointId id); void notifyBreakpointInsertFailed(BreakpointId id); void notifyBreakpointChangeOk(BreakpointId id); + void notifyBreakpointChangeProceeding(BreakpointId id); void notifyBreakpointChangeFailed(BreakpointId id); void notifyBreakpointPending(BreakpointId id); void notifyBreakpointRemoveProceeding(BreakpointId id); diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 2454691ef1f..79071bccddc 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -2622,31 +2622,42 @@ void GdbEngine::insertBreakpoint(BreakpointId id) void GdbEngine::changeBreakpoint(BreakpointId id) { - const BreakpointParameters &data = breakHandler()->breakpointData(id); + BreakHandler *handler = breakHandler(); + const BreakpointParameters &data = handler->breakpointData(id); QTC_ASSERT(data.type != UnknownType, return); - const BreakpointResponse &response = breakHandler()->response(id); + const BreakpointResponse &response = handler->response(id); QTC_ASSERT(response.number > 0, return); const QByteArray bpnr = QByteArray::number(response.number); + QTC_ASSERT(response.number > 0, return); + bool finished = true; if (data.condition != response.condition && !data.conditionsMatch(response.condition)) { // Update conditions if needed. + handler->notifyBreakpointChangeProceeding(id); + finished = false; postCommand("condition " + bpnr + ' ' + data.condition, NeedsStop | RebuildBreakpointModel, CB(handleBreakCondition), id); } if (data.ignoreCount != response.ignoreCount) { // Update ignorecount if needed. + handler->notifyBreakpointChangeProceeding(id); + finished = false; postCommand("ignore " + bpnr + ' ' + QByteArray::number(data.ignoreCount), NeedsStop | RebuildBreakpointModel, CB(handleBreakIgnore), id); } if (!data.enabled && response.enabled) { + handler->notifyBreakpointChangeProceeding(id); + finished = false; postCommand("-break-disable " + bpnr, NeedsStop | RebuildBreakpointModel, CB(handleBreakDisable), id); } if (data.enabled && !response.enabled) { + handler->notifyBreakpointChangeProceeding(id); + finished = false; postCommand("-break-enable " + bpnr, NeedsStop | RebuildBreakpointModel, CB(handleBreakEnable), id); @@ -2663,6 +2674,9 @@ void GdbEngine::changeBreakpoint(BreakpointId id) } attemptAdjustBreakpointLocation(id); + + if (finished) + handler->notifyBreakpointChangeOk(id); } void GdbEngine::removeBreakpoint(BreakpointId id)