Debugger: Use direct access to WatchItems in LLDB engine

Change-Id: If431c9b03113d1958e18d23edf7e6433ca5922de
Reviewed-by: Christian Stenger <christian.stenger@theqtcompany.com>
This commit is contained in:
hjk
2015-01-28 18:12:46 +01:00
parent 7f6dbbb3f6
commit 2f855643a3

View File

@@ -1013,29 +1013,32 @@ void LldbEngine::refreshLocals(const GdbMi &vars)
//const bool partial = response.cookie.toBool(); //const bool partial = response.cookie.toBool();
WatchHandler *handler = watchHandler(); WatchHandler *handler = watchHandler();
handler->resetValueCache(); handler->resetValueCache();
QList<WatchData> list;
//if (!partial) { QSet<QByteArray> toDelete;
list.append(*handler->findData("local")); foreach (WatchItem *item, handler->model()->treeLevelItems<WatchItem *>(2))
list.append(*handler->findData("watch")); toDelete.insert(item->d.iname);
list.append(*handler->findData("tooltip"));
list.append(*handler->findData("return"));
//}
foreach (const GdbMi &child, vars.children()) { foreach (const GdbMi &child, vars.children()) {
WatchData dummy; QByteArray iname = child["iname"].data();
dummy.iname = child["iname"].data(); QString name;
GdbMi wname = child["wname"]; GdbMi wname = child["wname"];
if (wname.isValid()) { if (wname.isValid()) // Happens (only) for watched expressions.
// Happens (only) for watched expressions. name = QString::fromUtf8(QByteArray::fromHex(wname.data()));
dummy.exp = QByteArray::fromHex(wname.data()); else
dummy.name = QString::fromUtf8(dummy.exp); name = QString::fromLatin1(child["name"].data());
} else {
dummy.name = child["name"].toUtf8(); WatchItem *item = new WatchItem(iname, name);
} item->parseWatchData(handler->expandedINames(), child);
parseWatchData(handler->expandedINames(), dummy, child, &list);
if (wname.isValid())
item->d.exp = name.toUtf8();
handler->insertItem(item);
toDelete.remove(item->d.iname);
} }
handler->insertData(list);
handler->purgeOutdatedItems(toDelete);
DebuggerToolTipManager::updateEngine(this); DebuggerToolTipManager::updateEngine(this);
} }