diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp index e051804c1ae..7b9046fa929 100644 --- a/src/plugins/debugger/breakhandler.cpp +++ b/src/plugins/debugger/breakhandler.cpp @@ -124,9 +124,9 @@ public: return; //if (m_data->markerLineNumber == lineNumber) // return; - if (m_data->markerLineNumber != lineNumber) { - m_data->markerLineNumber = lineNumber; - // FIXME: should we tell gdb about the change? + if (m_data->markerLineNumber() != lineNumber) { + m_data->setMarkerLineNumber(lineNumber); + // FIXME: Should we tell gdb about the change? // Ignore it for now, as we would require re-compilation // and debugger re-start anyway. if (0 && !m_data->bpLineNumber.isEmpty()) { @@ -135,8 +135,14 @@ public: } } } - m_data->lineNumber = QByteArray::number(lineNumber); - m_data->handler()->updateMarkers(); + // Ignore updates to the "real" line number while the debugger is + // running, as this can be triggered by moving the breakpoint to + // the next line that generated code. + // FIXME: Do we need yet another data member? + if (m_data->bpNumber.trimmed().isEmpty()) { + m_data->lineNumber = QByteArray::number(lineNumber); + m_data->handler()->updateMarkers(); + } } private: @@ -163,7 +169,7 @@ BreakpointData::BreakpointData(BreakHandler *handler) enabled = true; pending = true; marker = 0; - markerLineNumber = 0; + m_markerLineNumber = 0; bpMultiple = false; //#if defined(Q_OS_MAC) // // full names do not work on Mac/MI @@ -189,26 +195,36 @@ void BreakpointData::removeMarker() void BreakpointData::updateMarker() { - if (marker && (markerFileName != marker->fileName() - || markerLineNumber != marker->lineNumber())) + if (marker && (m_markerFileName != marker->fileName() + || m_markerLineNumber != marker->lineNumber())) removeMarker(); - if (!marker && !markerFileName.isEmpty() && markerLineNumber > 0) - marker = new BreakpointMarker(this, markerFileName, markerLineNumber); + if (!marker && !m_markerFileName.isEmpty() && m_markerLineNumber > 0) + marker = new BreakpointMarker(this, m_markerFileName, m_markerLineNumber); if (marker) marker->setPending(pending, enabled); } +void BreakpointData::setMarkerFileName(const QString &fileName) +{ + m_markerFileName = fileName; +} + +void BreakpointData::setMarkerLineNumber(int lineNumber) +{ + m_markerLineNumber = lineNumber; +} + QString BreakpointData::toToolTip() const { QString rc; QTextStream str(&rc); str << "
| " << BreakHandler::tr("Marker File:") - << " | " << markerFileName << " | " << m_markerFileName << " | " << "
| " << BreakHandler::tr("Marker Line:") - << " | " << markerLineNumber << " | " << m_markerLineNumber << " | " << "
| " << BreakHandler::tr("Breakpoint Number:") << " | " << bpNumber << " | |
| " << BreakHandler::tr("Breakpoint Address:") @@ -226,8 +242,7 @@ QString BreakpointData::toToolTip() const << " | ||
| " << BreakHandler::tr("Line Number:") << " | " << lineNumber << " | " << bpLineNumber << " |
| " << BreakHandler::tr("Corrected Line Number:") - << " | " << lineNumber - << " | " << bpCorrectedLineNumber << " | - | " << bpCorrectedLineNumber << " | " << "
| " << BreakHandler::tr("Condition:") << " | " << condition << " | " << bpCondition << " |
| " << BreakHandler::tr("Ignore Count:")
@@ -240,8 +255,8 @@ QString BreakpointData::toString() const
{
QString rc;
QTextStream str(&rc);
- str << BreakHandler::tr("Marker File:") << markerFileName << ' '
- << BreakHandler::tr("Marker Line:") << markerLineNumber << ' '
+ str << BreakHandler::tr("Marker File:") << m_markerFileName << ' '
+ << BreakHandler::tr("Marker Line:") << m_markerLineNumber << ' '
<< BreakHandler::tr("Breakpoint Number:") << bpNumber << ' '
<< BreakHandler::tr("Breakpoint Address:") << bpAddress << '\n'
<< BreakHandler::tr("File Name:")
@@ -268,7 +283,8 @@ bool BreakpointData::isLocatedAt(const QString &fileName_, int lineNumber_) cons
return true;
return false;
*/
- return lineNumber_ == markerLineNumber && fileNameMatch(fileName_, markerFileName);
+ return lineNumber_ == m_markerLineNumber
+ && fileNameMatch(fileName_, m_markerFileName);
}
bool BreakpointData::conditionsMatch() const
@@ -343,7 +359,7 @@ void BreakHandler::clear()
m_inserted.clear();
}
-int BreakHandler::findBreakpoint(const BreakpointData &needle)
+int BreakHandler::findBreakpoint(const BreakpointData &needle) const
{
// Search a breakpoint we might refer to.
for (int index = 0; index != size(); ++index) {
@@ -360,7 +376,7 @@ int BreakHandler::findBreakpoint(const BreakpointData &needle)
return -1;
}
-int BreakHandler::findBreakpoint(const QString &fileName, int lineNumber)
+int BreakHandler::findBreakpoint(const QString &fileName, int lineNumber) const
{
for (int index = 0; index != size(); ++index)
if (at(index)->isLocatedAt(fileName, lineNumber))
@@ -368,15 +384,15 @@ int BreakHandler::findBreakpoint(const QString &fileName, int lineNumber)
return -1;
}
-int BreakHandler::findBreakpoint(int bpNumber)
+BreakpointData *BreakHandler::findBreakpoint(int bpNumber) const
{
if (!size())
- return -1;
+ return 0;
QString numStr = QString::number(bpNumber);
for (int index = 0; index != size(); ++index)
if (at(index)->bpNumber == numStr)
- return index;
- return -1;
+ return at(index);
+ return 0;
}
void BreakHandler::saveBreakpoints()
@@ -433,8 +449,8 @@ void BreakHandler::loadBreakpoints()
v = map.value(QLatin1String("usefullpath"));
if (v.isValid())
data->useFullPath = bool(v.toInt());
- data->markerFileName = data->fileName;
- data->markerLineNumber = data->lineNumber.toInt();
+ data->setMarkerFileName(data->fileName);
+ data->setMarkerLineNumber(data->lineNumber.toInt());
append(data);
}
}
@@ -450,14 +466,15 @@ void BreakHandler::resetBreakpoints()
data->bpFuncName.clear();
data->bpFileName.clear();
data->bpLineNumber.clear();
+ data->bpCorrectedLineNumber.clear();
data->bpCondition.clear();
data->bpIgnoreCount.clear();
data->bpAddress.clear();
// Keep marker data if it was primary.
- if (data->markerFileName != data->fileName)
- data->markerFileName.clear();
- if (data->markerLineNumber != data->lineNumber.toInt())
- data->markerLineNumber = 0;
+ if (data->markerFileName() != data->fileName)
+ data->setMarkerFileName(QString());
+ if (data->markerLineNumber() != data->lineNumber.toInt())
+ data->setMarkerLineNumber(0);
}
m_enabled.clear();
m_disabled.clear();
@@ -696,8 +713,8 @@ void BreakHandler::setBreakpoint(const QString &fileName, int lineNumber)
data->fileName = fileName;
data->lineNumber = QByteArray::number(lineNumber);
data->pending = true;
- data->markerFileName = fileName;
- data->markerLineNumber = lineNumber;
+ data->setMarkerFileName(fileName);
+ data->setMarkerLineNumber(lineNumber);
append(data);
emit layoutChanged();
saveBreakpoints();
@@ -738,10 +755,10 @@ void BreakHandler::loadSessionData()
void BreakHandler::activateBreakpoint(int index)
{
const BreakpointData *data = at(index);
- if (!data->markerFileName.isEmpty()) {
+ if (!data->markerFileName().isEmpty()) {
StackFrame frame;
- frame.file = data->markerFileName;
- frame.line = data->markerLineNumber;
+ frame.file = data->markerFileName();
+ frame.line = data->markerLineNumber();
m_manager->gotoLocation(frame, false);
}
}
diff --git a/src/plugins/debugger/breakhandler.h b/src/plugins/debugger/breakhandler.h
index 63ac4efbb52..c9d476657bb 100644
--- a/src/plugins/debugger/breakhandler.h
+++ b/src/plugins/debugger/breakhandler.h
@@ -88,16 +88,24 @@ public:
QByteArray bpCondition; // Condition acknowledged by the debugger engine.
QByteArray bpIgnoreCount;// Ignore count acknowledged by the debugger engine.
QString bpFileName; // File name acknowledged by the debugger engine.
+ QString bpFullName; // Full file name acknowledged by the debugger engine.
QByteArray bpLineNumber; // Line number acknowledged by the debugger engine.
QByteArray bpCorrectedLineNumber; // Acknowledged by the debugger engine.
QString bpFuncName; // Function name acknowledged by the debugger engine.
QByteArray bpAddress; // Address acknowledged by the debugger engine.
- bool bpMultiple; // Happens in constructors/gdb.
- bool bpEnabled; // Enable/disable command sent.
+ bool bpMultiple; // Happens in constructors/gdb.
+ bool bpEnabled; // Enable/disable command sent.
+ void setMarkerFileName(const QString &fileName);
+ QString markerFileName() const { return m_markerFileName; }
+
+ void setMarkerLineNumber(int lineNumber);
+ int markerLineNumber() const { return m_markerLineNumber; }
+
+private:
// Taken from either user input or gdb responses.
- QString markerFileName; // Used to locate the marker.
- int markerLineNumber;
+ QString m_markerFileName; // Used to locate the marker.
+ int m_markerLineNumber;
// Our red blob in the editor.
BreakpointMarker *marker;
@@ -132,9 +140,9 @@ public:
void removeAt(int index); // This also deletes the marker.
void clear(); // This also deletes all the marker.
int indexOf(BreakpointData *data) { return m_bp.indexOf(data); }
- int findBreakpoint(const QString &fileName, int lineNumber);
- int findBreakpoint(const BreakpointData &data); // Returns index.
- int findBreakpoint(int bpNumber); // Returns index.
+ int findBreakpoint(const QString &fileName, int lineNumber) const;
+ int findBreakpoint(const BreakpointData &data) const; // Returns index.
+ BreakpointData *findBreakpoint(int bpNumber) const;
void updateMarkers();
QList |