diff --git a/src/plugins/debugger/lldb/lldbengine.cpp b/src/plugins/debugger/lldb/lldbengine.cpp index 5786fda6d13..119382b8781 100644 --- a/src/plugins/debugger/lldb/lldbengine.cpp +++ b/src/plugins/debugger/lldb/lldbengine.cpp @@ -664,7 +664,67 @@ void LldbEngine::updateWatchData(const WatchData &data, const WatchUpdateFlags & Q_UNUSED(data); Q_UNUSED(flags); WatchHandler *handler = watchHandler(); - runCommand(Command("updateData").arg("expanded", handler->expansionRequests())); + + Command cmd("updateData"); + cmd.arg("expanded", handler->expansionRequests()); + cmd.arg("typeformats", handler->typeFormatRequests()); + cmd.arg("formats", handler->individualFormatRequests()); + + QList watcherData; +// const QString fileName = stackHandler()->currentFrame().file; +// if (!fileName.isEmpty()) { +// const QString function = stackHandler()->currentFrame().function; +// typedef DebuggerToolTipManager::ExpressionInamePair ExpressionInamePair; +// typedef DebuggerToolTipManager::ExpressionInamePairs ExpressionInamePairs; + +// // Re-create tooltip items that are not filters on existing local variables in +// // the tooltip model. +// ExpressionInamePairs toolTips = DebuggerToolTipManager::instance() +// ->treeWidgetExpressions(fileName, objectName(), function); + +// const QString currentExpression = tooltipExpression(); +// if (!currentExpression.isEmpty()) { +// int currentIndex = -1; +// for (int i = 0; i < toolTips.size(); ++i) { +// if (toolTips.at(i).first == currentExpression) { +// currentIndex = i; +// break; +// } +// } +// if (currentIndex < 0) +// toolTips.push_back(ExpressionInamePair(currentExpression, tooltipIName(currentExpression))); +// } + +// foreach (const ExpressionInamePair &p, toolTips) { +// if (p.second.startsWith("tooltip")) { +// QHash hash; +// hash["exp"] = p.first.toLatin1(); +// hash["id"] = p.second; +// watcherData.append(Command::toData(hash)); +// } +// } +// } + + QHashIterator it(handler->watcherNames()); + while (it.hasNext()) { + it.next(); + QHash hash; + hash["exp"] = '\'' + it.key() + '\''; + hash["id"] = "'watch." + QByteArray::number(it.value()) + '\''; + watcherData.append(Command::toData(hash)); + } + cmd.args.append("'watchers':" + Command::toData(watcherData) + ','); + + const static bool alwaysVerbose = !qgetenv("QTC_DEBUGGER_PYTHON_VERBOSE").isEmpty(); + cmd.arg("passexeptions", alwaysVerbose); + cmd.arg("fancy", debuggerCore()->boolSetting(UseDebuggingHelpers)); + cmd.arg("autoderef", debuggerCore()->boolSetting(AutoDerefPointers)); + cmd.arg("dyntype", debuggerCore()->boolSetting(UseDynamicType)); + //cmd.arg("partial", ??) + //cmd.arg("tooltipOnly", ??) + //cmd.arg("resultvarname", m_resultVarName); + + runCommand(cmd); } void LldbEngine::handleLldbError(QProcess::ProcessError error) @@ -1047,6 +1107,30 @@ const LldbEngine::Command &LldbEngine::Command::argHelper(const char *name, cons return *this; } +QByteArray LldbEngine::Command::toData(const QList &value) +{ + QByteArray res; + foreach (const QByteArray &item, value) { + if (!res.isEmpty()) + res.append(','); + res += item; + } + return '[' + res + ']'; +} + +QByteArray LldbEngine::Command::toData(const QHash &value) +{ + QByteArray res; + QHashIterator it(value); + while (it.hasNext()) { + it.next(); + if (!res.isEmpty()) + res.append(','); + res += '\'' + it.key() + "':" + it.value(); + } + return '{' + res + '}'; +} + const LldbEngine::Command &LldbEngine::Command::arg(const char *name, int value) const { return argHelper(name, QByteArray::number(value)); diff --git a/src/plugins/debugger/lldb/lldbengine.h b/src/plugins/debugger/lldb/lldbengine.h index 71ff6681790..818ee91ca64 100644 --- a/src/plugins/debugger/lldb/lldbengine.h +++ b/src/plugins/debugger/lldb/lldbengine.h @@ -78,6 +78,9 @@ private: const Command &beginGroup(const char *name = 0) const; void endGroup() const; + static QByteArray toData(const QList &value); + static QByteArray toData(const QHash &value); + QByteArray function; mutable QByteArray args; private: