diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp index f3302d3d7917ae9be9e38081e039fc133c8d3a58..5fb48023d7135cbc0dcbfd7e6a01bb67492c6695 100644 --- a/src/plugins/debugger/breakhandler.cpp +++ b/src/plugins/debugger/breakhandler.cpp @@ -571,17 +571,20 @@ void BreakHandler::removeAllBreakpoints() updateMarkers(); } -BreakpointData *BreakHandler::findBreakpoint(const QString &fileName, int lineNumber) +BreakpointData *BreakHandler::findBreakpoint(const QString &fileName, + int lineNumber, bool useMarkerPosition) { foreach (BreakpointData *data, m_bp) - if (data->isLocatedAt(fileName, lineNumber)) + if (data->isLocatedAt(fileName, lineNumber, useMarkerPosition)) return data; return 0; } void BreakHandler::toggleBreakpoint(const QString &fileName, int lineNumber) { - BreakpointData *data = findBreakpoint(fileName, lineNumber); + BreakpointData *data = findBreakpoint(fileName, lineNumber, true); + if (!data) + data = findBreakpoint(fileName, lineNumber, false); if (data) { removeBreakpoint(data); } else { diff --git a/src/plugins/debugger/breakhandler.h b/src/plugins/debugger/breakhandler.h index 270310e60f3c00191eedb501aba5267fdcab52fa..f5624d698c44730237c91d9ce410d6724755d963 100644 --- a/src/plugins/debugger/breakhandler.h +++ b/src/plugins/debugger/breakhandler.h @@ -93,7 +93,8 @@ public: void storeToTemplate(BreakHandler *other); void toggleBreakpoint(const QString &fileName, int lineNumber); void toggleBreakpointEnabled(const QString &fileName, int lineNumber); - BreakpointData *findBreakpoint(const QString &fileName, int lineNumber); + BreakpointData *findBreakpoint(const QString &fileName, int lineNumber, + bool useMarkerPosition = true); public slots: void appendBreakpoint(BreakpointData *data); diff --git a/src/plugins/debugger/breakpoint.cpp b/src/plugins/debugger/breakpoint.cpp index 981aed0ba4303826fc4fc081fbceb072f827e6bd..314ca87681bd7ed9b4d1ad2c7b9739ce74c77657 100644 --- a/src/plugins/debugger/breakpoint.cpp +++ b/src/plugins/debugger/breakpoint.cpp @@ -304,19 +304,11 @@ QString BreakpointData::toString() const return rc; } -bool BreakpointData::isLocatedAt(const QString &fileName_, int lineNumber_) const +bool BreakpointData::isLocatedAt(const QString &fileName_, int lineNumber_, + bool useMarkerPosition) const { - /* - if (lineNumber != QString::number(lineNumber_)) - return false; - if (fileName == fileName_) - return true; - if (fileName_.endsWith(fileName)) - return true; - return false; - */ - return lineNumber_ == m_markerLineNumber - && fileNameMatch(fileName_, m_markerFileName); + int line = useMarkerPosition ? m_markerLineNumber : lineNumber.toInt(); + return lineNumber_ == line && fileNameMatch(fileName_, m_markerFileName); } bool BreakpointData::isSimilarTo(const BreakpointData *needle) const diff --git a/src/plugins/debugger/breakpoint.h b/src/plugins/debugger/breakpoint.h index 7177c17142fc8b3ba792db908164428756f5abf0..0ff1f4b8ef0b69186d9a71cac9da7db18ea246d2 100644 --- a/src/plugins/debugger/breakpoint.h +++ b/src/plugins/debugger/breakpoint.h @@ -58,7 +58,8 @@ public: QString toString() const; BreakHandler *handler() { return m_handler; } - bool isLocatedAt(const QString &fileName, int lineNumber) const; + bool isLocatedAt(const QString &fileName, int lineNumber, + bool useMarkerPosition) const; bool isSimilarTo(const BreakpointData *needle) const; bool conditionsMatch() const;