aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bin/gdbmacros/gdbmacros.cpp1
-rw-r--r--src/plugins/debugger/debuggermanager.cpp6
-rw-r--r--src/plugins/debugger/watchhandler.cpp61
-rw-r--r--src/plugins/debugger/watchhandler.h11
-rw-r--r--tests/manual/gdbdebugger/simple/app.cpp2
5 files changed, 68 insertions, 13 deletions
diff --git a/bin/gdbmacros/gdbmacros.cpp b/bin/gdbmacros/gdbmacros.cpp
index a3b3de6a4d..e99c4dc8a1 100644
--- a/bin/gdbmacros/gdbmacros.cpp
+++ b/bin/gdbmacros/gdbmacros.cpp
@@ -2157,6 +2157,7 @@ static void qDumpStdMap(QDumper &d)
// HACK: we need a properly const qualified version of the
// std::pair used. We extract it from the allocator parameter
+ // (#4, "std::allocator<std::pair<key, value> >")
// as it is there, and, equally importantly, in an order that
// gdb accepts when fed with it.
char *pairType = (char *)(d.templateParameters[3]) + 16;
diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp
index ae32033b0d..62820b3fd1 100644
--- a/src/plugins/debugger/debuggermanager.cpp
+++ b/src/plugins/debugger/debuggermanager.cpp
@@ -250,6 +250,10 @@ void DebuggerManager::init()
this, SLOT(watchExpression(QString)));
connect(watchersView, SIGNAL(requestRemoveWatchExpression(QString)),
this, SLOT(removeWatchExpression(QString)));
+ connect(m_watchHandler, SIGNAL(sessionValueRequested(QString,QVariant*)),
+ this, SIGNAL(sessionValueRequested(QString,QVariant*)));
+ connect(m_watchHandler, SIGNAL(setSessionValueRequested(QString,QVariant)),
+ this, SIGNAL(setSessionValueRequested(QString,QVariant)));
// Tooltip
QTreeView *tooltipView = qobject_cast<QTreeView *>(m_tooltipWindow);
@@ -948,6 +952,7 @@ void DebuggerManager::aboutToSaveSession()
void DebuggerManager::loadSessionData()
{
m_breakHandler->loadSessionData();
+ m_watchHandler->loadSessionData();
QVariant value;
querySessionValue(QLatin1String("UseFastStart"), &value);
@@ -964,6 +969,7 @@ void DebuggerManager::loadSessionData()
void DebuggerManager::saveSessionData()
{
m_breakHandler->saveSessionData();
+ m_watchHandler->saveSessionData();
setSessionValue(QLatin1String("UseFastStart"),
m_useFastStartAction->isChecked());
diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index 59e37f2acb..152011c26e 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -888,6 +888,8 @@ void WatchHandler::watchExpression(const QString &exp)
data.name = exp;
data.iname = "watch." + exp;
insertData(data);
+ m_watchers.append(exp);
+ saveWatchers();
emit watchModelUpdateRequested();
}
@@ -965,7 +967,9 @@ void WatchHandler::showEditValue(const WatchData &data)
void WatchHandler::removeWatchExpression(const QString &iname)
{
MODEL_DEBUG("REMOVE WATCH: " << iname);
- (void) takeData(iname);
+ WatchData data = takeData(iname);
+ m_watchers.removeOne(data.iname);
+ saveWatchers();
emit watchModelUpdateRequested();
}
@@ -973,19 +977,26 @@ void WatchHandler::reinitializeWatchers()
{
m_completeSet = initialSet();
m_incompleteSet.clear();
+ reinitializeWatchersHelper();
+}
+void WatchHandler::reinitializeWatchersHelper()
+{
// copy over all watchers and mark all watchers as incomplete
- for (int i = 0, n = m_oldSet.size(); i < n; ++i) {
- WatchData data = m_oldSet.at(i);
- if (data.isWatcher()) {
- data.level = -1;
- data.row = -1;
- data.parentIndex = -1;
- data.variable.clear();
- data.setAllNeeded();
- data.valuedisabled = false;
- insertData(data); // properly handles "neededChildren"
- }
+ int i = 0;
+ foreach (const QString &exp, m_watchers) {
+ WatchData data;
+ data.level = -1;
+ data.row = -1;
+ data.parentIndex = -1;
+ data.variable.clear();
+ data.setAllNeeded();
+ data.valuedisabled = false;
+ data.iname = "watch." + QString::number(i);
+ data.name = exp;
+ data.exp = exp;
+ insertData(data);
+ ++i;
}
}
@@ -1180,3 +1191,29 @@ bool WatchHandler::checkIndex(int id) const
}
return true;
}
+
+void WatchHandler::loadWatchers()
+{
+ QVariant value;
+ sessionValueRequested("Watchers", &value);
+ m_watchers = value.toStringList();
+ qDebug() << "LOAD WATCHERS: " << m_watchers;
+ reinitializeWatchersHelper();
+}
+
+void WatchHandler::saveWatchers()
+{
+ qDebug() << "SAVE WATCHERS: " << m_watchers;
+ setSessionValueRequested("Watchers", m_watchers);
+}
+
+void WatchHandler::saveSessionData()
+{
+ saveWatchers();
+}
+
+void WatchHandler::loadSessionData()
+{
+ loadWatchers();
+ rebuildModel();
+}
diff --git a/src/plugins/debugger/watchhandler.h b/src/plugins/debugger/watchhandler.h
index 4ac2218a47..4c2a20b167 100644
--- a/src/plugins/debugger/watchhandler.h
+++ b/src/plugins/debugger/watchhandler.h
@@ -186,13 +186,23 @@ public:
WatchData *findData(const QString &iname);
+ void loadSessionData();
+ void saveSessionData();
+
signals:
void watchModelUpdateRequested();
+ void sessionValueRequested(const QString &name, QVariant *value);
+ void setSessionValueRequested(const QString &name, const QVariant &value);
+
private:
+ void reinitializeWatchersHelper();
WatchData takeData(const QString &iname);
QString toString() const;
+ void loadWatchers();
+ void saveWatchers();
+
bool m_expandPointers;
bool m_inChange;
@@ -203,6 +213,7 @@ private:
QList<WatchData> m_completeSet;
QList<WatchData> m_oldSet;
QList<WatchData> m_displaySet;
+ QStringList m_watchers;
void setDisplayedIName(const QString &iname, bool on);
QSet<QString> m_expandedINames; // those expanded in the treeview
diff --git a/tests/manual/gdbdebugger/simple/app.cpp b/tests/manual/gdbdebugger/simple/app.cpp
index 24626064e4..5156e6fb5f 100644
--- a/tests/manual/gdbdebugger/simple/app.cpp
+++ b/tests/manual/gdbdebugger/simple/app.cpp
@@ -116,7 +116,7 @@ private:
void testArray()
{
- QString x[4];
+ QString x[20];
x[0] = "a";
x[1] = "b";
x[2] = "c";