From 694503cc7632e2894ad626b2e5184fcecb4e0741 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 16 Nov 2010 11:06:09 +0100 Subject: [PATCH] debugger: looks like the BreakpointData layer is going to be unneeded. --- src/plugins/debugger/breakhandler.cpp | 22 ++++++--------- src/plugins/debugger/breakhandler.h | 7 ++--- src/plugins/debugger/breakpoint.cpp | 4 +-- src/plugins/debugger/breakpoint.h | 2 +- src/plugins/debugger/breakwindow.cpp | 4 +-- src/plugins/debugger/gdb/gdbengine.cpp | 39 ++++++++++++-------------- 6 files changed, 33 insertions(+), 45 deletions(-) diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp index 2d083496991..73ddf8b2480 100644 --- a/src/plugins/debugger/breakhandler.cpp +++ b/src/plugins/debugger/breakhandler.cpp @@ -168,18 +168,12 @@ BreakpointId BreakHandler::findBreakpointByFileAndLine(const QString &fileName, return BreakpointId(-1); } -const BreakpointData *BreakHandler::breakpointById(BreakpointId id) const +const BreakpointParameters &BreakHandler::breakpointData(BreakpointId id) const { + static BreakpointParameters dummy; ConstIterator it = m_storage.find(id); - QTC_ASSERT(it != m_storage.end(), return 0); - return &it->data; -} - -BreakpointData *BreakHandler::breakpointById(BreakpointId id) -{ - Iterator it = m_storage.find(id); - QTC_ASSERT(it != m_storage.end(), return 0); - return &it->data; + QTC_ASSERT(it != m_storage.end(), return dummy); + return it->data.parameters(); } BreakpointId BreakHandler::findWatchpointByAddress(quint64 address) const @@ -626,9 +620,9 @@ void BreakHandler::appendBreakpoint(const BreakpointParameters &data) BreakpointId id(++currentId); BreakpointItem item; - BreakpointData d; - d.m_parameters = data; - item.data = d; + item.data.m_parameters = data; + item.markerFileName = data.fileName; + item.markerLineNumber = data.lineNumber; m_storage.insert(id, item); scheduleSynchronization(); } @@ -855,7 +849,7 @@ void BreakHandler::setResponse(BreakpointId id, const BreakpointResponse &data) updateMarker(id); } -void BreakHandler::setData(BreakpointId id, const BreakpointParameters &data) +void BreakHandler::setBreakpointData(BreakpointId id, const BreakpointParameters &data) { Iterator it = m_storage.find(id); QTC_ASSERT(it != m_storage.end(), return); diff --git a/src/plugins/debugger/breakhandler.h b/src/plugins/debugger/breakhandler.h index 494a067ca28..441da1c9412 100644 --- a/src/plugins/debugger/breakhandler.h +++ b/src/plugins/debugger/breakhandler.h @@ -92,15 +92,11 @@ public: BreakpointId findBreakpointByFileAndLine(const QString &fileName, int lineNumber, bool useMarkerPosition = true); BreakpointId findBreakpointByAddress(quint64 address) const; - const BreakpointData *breakpointById(BreakpointId id) const; - BreakpointData *breakpointById(BreakpointId id); // FIXME: For breakwindow. void breakByFunction(const QString &functionName); void removeBreakpoint(BreakpointId id); QIcon icon(BreakpointId id) const; - void gotoLocation(BreakpointId id) const; - void setData(BreakpointId id, const BreakpointParameters &data); // Getter retrieves property value. // Setter sets property value and triggers update if changed. @@ -120,13 +116,14 @@ public: PROPERTY(quint64, address, setAddress); PROPERTY(int, lineNumber, setLineNumber); #undef PROPERTY + void setBreakpointData(BreakpointId id, const BreakpointParameters &data); + const BreakpointParameters &breakpointData(BreakpointId id) const; BreakpointState state(BreakpointId id) const; bool isEnabled(BreakpointId id) const; void setEnabled(BreakpointId id, bool on); void updateLineNumberFromMarker(BreakpointId id, int lineNumber); void setMarkerFileAndLine(BreakpointId id, const QString &fileName, int lineNumber); - DebuggerEngine *engine(BreakpointId id) const; void setEngine(BreakpointId id, DebuggerEngine *engine); const BreakpointResponse &response(BreakpointId id) const; diff --git a/src/plugins/debugger/breakpoint.cpp b/src/plugins/debugger/breakpoint.cpp index 79b00d53c84..d3b4432e2d7 100644 --- a/src/plugins/debugger/breakpoint.cpp +++ b/src/plugins/debugger/breakpoint.cpp @@ -119,10 +119,10 @@ bool BreakpointData::setCondition(const QByteArray &cond) #undef SETIT -bool BreakpointData::conditionsMatch(const QByteArray &other) const +bool BreakpointParameters::conditionsMatch(const QByteArray &other) const { // Some versions of gdb "beautify" the passed condition. - QByteArray s1 = m_parameters.condition; + QByteArray s1 = condition; s1.replace(' ', ""); QByteArray s2 = other; s2.replace(' ', ""); diff --git a/src/plugins/debugger/breakpoint.h b/src/plugins/debugger/breakpoint.h index 4e5ecbfdb59..8b43dbb6e1d 100644 --- a/src/plugins/debugger/breakpoint.h +++ b/src/plugins/debugger/breakpoint.h @@ -84,6 +84,7 @@ class BreakpointParameters public: explicit BreakpointParameters(BreakpointType = UnknownType); bool equals(const BreakpointParameters &rhs) const; + bool conditionsMatch(const QByteArray &other) const; BreakpointType type; // Type of breakpoint. bool enabled; // Should we talk to the debugger engine? @@ -118,7 +119,6 @@ public: bool useFullPath() const { return m_parameters.useFullPath; } QString toString() const; - bool conditionsMatch(const QByteArray &other) const; QString functionName() const { return m_parameters.functionName; } QString fileName() const { return m_parameters.fileName; } int lineNumber() const { return m_parameters.lineNumber; } diff --git a/src/plugins/debugger/breakwindow.cpp b/src/plugins/debugger/breakwindow.cpp index 25f7790a12e..08e4c60f409 100644 --- a/src/plugins/debugger/breakwindow.cpp +++ b/src/plugins/debugger/breakwindow.cpp @@ -417,9 +417,9 @@ void BreakWindow::deleteBreakpoints(const QModelIndexList &list) void BreakWindow::editBreakpoint(BreakpointId id, QWidget *parent) { BreakpointDialog dialog(parent); - BreakpointParameters data = breakHandler()->breakpointById(id)->parameters(); + BreakpointParameters data = breakHandler()->breakpointData(id); if (dialog.showDialog(&data)) - breakHandler()->setData(id, data); + breakHandler()->setBreakpointData(id, data); } void BreakWindow::addBreakpoint() diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 63183de8689..fa76e7cd883 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -2156,32 +2156,30 @@ static QByteArray addressSpec(quint64 address) QByteArray GdbEngine::breakpointLocation(BreakpointId id) { BreakHandler *handler = breakHandler(); - const BreakpointData *data = handler->breakpointById(id); - QTC_ASSERT(data, return QByteArray()); - const BreakpointParameters parameters = data->parameters(); + const BreakpointParameters &data = handler->breakpointData(id); + QTC_ASSERT(data.type != UnknownType, return QByteArray()); // FIXME: Non-GCC-runtime - if (parameters.type == BreakpointAtThrow) + if (data.type == BreakpointAtThrow) return "__cxa_throw"; - if (parameters.type == BreakpointAtCatch) + if (data.type == BreakpointAtCatch) return "__cxa_begin_catch"; - if (parameters.type == BreakpointAtMain) + if (data.type == BreakpointAtMain) #ifdef Q_OS_WIN return "qMain"; #else return "main"; #endif - const QByteArray functionName = parameters.functionName.toUtf8(); + const QByteArray functionName = data.functionName.toUtf8(); if (!functionName.isEmpty()) return functionName; - if (const quint64 address = handler->address(id)) + if (const quint64 address = data.address) return addressSpec(address); // In this case, data->funcName is something like '*0xdeadbeef' - const int lineNumber = handler->lineNumber(id); + const int lineNumber = data.lineNumber; if (lineNumber == 0) return functionName; - const QString fileName = parameters.useFullPath ? - breakLocation(parameters.fileName) : - parameters.fileName; + const QString fileName = data.useFullPath + ? breakLocation(data.fileName) : data.fileName; // The argument is simply a C-quoted version of the argument to the // non-MI "break" command, including the "original" quoting it wants. return "\"\\\"" + GdbMi::escapeCString(fileName).toLocal8Bit() + "\\\":" @@ -2622,32 +2620,31 @@ void GdbEngine::insertBreakpoint(BreakpointId id) void GdbEngine::changeBreakpoint(BreakpointId id) { - const BreakpointData *data0 = breakHandler()->breakpointById(id); - QTC_ASSERT(data0, return); - const BreakpointData &data = *data0; + const BreakpointParameters &data = breakHandler()->breakpointData(id); + QTC_ASSERT(data.type != UnknownType, return); const BreakpointResponse &response = breakHandler()->response(id); QTC_ASSERT(response.number > 0, return); const QByteArray bpnr = QByteArray::number(response.number); - if (data.condition() != response.condition + if (data.condition != response.condition && !data.conditionsMatch(response.condition)) { // Update conditions if needed. - postCommand("condition " + bpnr + ' ' + data.condition(), + postCommand("condition " + bpnr + ' ' + data.condition, NeedsStop | RebuildBreakpointModel, CB(handleBreakCondition), id); } - if (data.ignoreCount() != response.ignoreCount) { + if (data.ignoreCount != response.ignoreCount) { // Update ignorecount if needed. - postCommand("ignore " + bpnr + ' ' + QByteArray::number(data.ignoreCount()), + postCommand("ignore " + bpnr + ' ' + QByteArray::number(data.ignoreCount), NeedsStop | RebuildBreakpointModel, CB(handleBreakIgnore), id); } - if (!data.isEnabled() && response.enabled) { + if (!data.enabled && response.enabled) { postCommand("-break-disable " + bpnr, NeedsStop | RebuildBreakpointModel, CB(handleBreakDisable), id); } - if (data.isEnabled() && !response.enabled) { + if (data.enabled && !response.enabled) { postCommand("-break-enable " + bpnr, NeedsStop | RebuildBreakpointModel, CB(handleBreakEnable), id);