OSDN Git Service

debugger: refactor watch point lookup
authorhjk <qtc-committer@nokia.com>
Tue, 1 Mar 2011 18:16:24 +0000 (19:16 +0100)
committerhjk <qtc-committer@nokia.com>
Tue, 1 Mar 2011 18:17:03 +0000 (19:17 +0100)
In preparation of bitfield watch points.

src/plugins/debugger/breakhandler.cpp
src/plugins/debugger/breakhandler.h
src/plugins/debugger/breakpoint.cpp
src/plugins/debugger/breakpoint.h
src/plugins/debugger/watchhandler.cpp
src/plugins/debugger/watchwindow.cpp

index 4a74896..8110982 100644 (file)
@@ -240,33 +240,18 @@ const BreakpointParameters &BreakHandler::breakpointData(BreakpointId id) const
     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");
index 4c19195..ce3cbfd 100644 (file)
@@ -80,12 +80,10 @@ public:
     // 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();
index 7dd21a7..36530bd 100644 (file)
@@ -53,7 +53,8 @@ namespace Internal {
 
 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)
 {}
 
index 722adba..92af630 100644 (file)
@@ -107,6 +107,9 @@ public:
     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
index 2b89596..2fe3481 100644 (file)
@@ -724,17 +724,21 @@ QVariant WatchModel::data(const QModelIndex &idx, int role) const
                 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:
index 430fb96..deb6a73 100644 (file)
@@ -654,7 +654,15 @@ void WatchWindow::setModelData
 
 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