In preparation of bitfield watch points.
return it->data;
}
-BreakpointId BreakHandler::findWatchpointByAddress(quint64 address) const
+BreakpointId BreakHandler::findWatchpoint(const BreakpointParameters &data) const
{
ConstIterator it = m_storage.constBegin(), et = m_storage.constEnd();
for ( ; it != et; ++it)
- if (it->data.isWatchpoint() && it->data.address == address)
+ if (it->data.isWatchpoint()
+ && it->data.address == data.address
+ && it->data.size == data.size
+ && it->data.bitpos == data.bitpos)
return it.key();
return BreakpointId();
}
-void BreakHandler::setWatchpointByAddress(quint64 address)
-{
- const int id = findWatchpointByAddress(address);
- if (id) {
- qDebug() << "WATCHPOINT EXISTS";
- // removeBreakpoint(index);
- return;
- }
- BreakpointParameters data(Watchpoint);
- data.address = address;
- appendBreakpoint(data);
-}
-
-bool BreakHandler::hasWatchpointAt(quint64 address) const
-{
- return findWatchpointByAddress(address);
-}
-
void BreakHandler::saveBreakpoints()
{
const QString one = _("1");
// Find a breakpoint matching approximately the data in needle.
BreakpointId findSimilarBreakpoint(const BreakpointResponse &needle) const;
BreakpointId findBreakpointByNumber(int bpNumber) const;
- BreakpointId findWatchpointByAddress(quint64 address) const;
+ BreakpointId findWatchpoint(const BreakpointParameters &data) const;
BreakpointId findBreakpointByFunction(const QString &functionName) const;
BreakpointId findBreakpointByIndex(const QModelIndex &index) const;
BreakpointIds findBreakpointsByIndex(const QList<QModelIndex> &list) const;
- void setWatchpointByAddress(quint64 address);
- bool hasWatchpointAt(quint64 address) const;
void updateMarkers();
static QIcon breakpointIcon();
BreakpointParameters::BreakpointParameters(BreakpointType t)
: type(t), enabled(true), pathUsage(BreakpointPathUsageEngineDefault),
- ignoreCount(0), lineNumber(0), address(0), threadSpec(-1),
+ ignoreCount(0), lineNumber(0), address(0), size(0),
+ bitpos(0), bitsize(0), threadSpec(-1),
tracepoint(false)
{}
int ignoreCount; //!< Ignore count associated with breakpoint.
int lineNumber; //!< Line in source file.
quint64 address; //!< Address for watchpoints.
+ uint size; //!< Size of watched area for watchpoints.
+ uint bitpos; //!< Location of watched bitfield within watched area.
+ uint bitsize; //!< Size of watched bitfield within watched area.
int threadSpec; //!< Thread specification.
QString functionName;
QString module; //!< module for file name
return pointerValue(data.value);
return QVariant(quint64(0));
- case LocalsIsWatchpointAtAddressRole:
- return engine()->breakHandler()
- ->hasWatchpointAt(data.coreAddress());
+ case LocalsIsWatchpointAtAddressRole: {
+ BreakpointParameters bp(Watchpoint);
+ bp.address = data.coreAddress();
+ return engine()->breakHandler()->findWatchpoint(bp) != 0;
+ }
case LocalsAddressRole:
return data.coreAddress();
case LocalsIsWatchpointAtPointerValueRole:
- if (isPointerType(data.type))
- return engine()->breakHandler()
- ->hasWatchpointAt(pointerValue(data.value));
+ if (isPointerType(data.type)) {
+ BreakpointParameters bp(Watchpoint);
+ bp.address = pointerValue(data.value);
+ return engine()->breakHandler()->findWatchpoint(bp) != 0;
+ }
return false;
default:
void WatchWindow::setWatchpoint(quint64 address)
{
- breakHandler()->setWatchpointByAddress(address);
+ BreakpointParameters data(Watchpoint);
+ data.address = address;
+ BreakpointId id = breakHandler()->findWatchpoint(data);
+ if (id) {
+ qDebug() << "WATCHPOINT EXISTS";
+ // removeBreakpoint(index);
+ return;
+ }
+ breakHandler()->appendBreakpoint(data);
}
} // namespace Internal