forked from qt-creator/qt-creator
Debugger: Merge watcher request creation
... of {Gdb,Lldb,Pdb}Engine. Code is the same nowadays.
Change-Id: I874b1ddfd813c15cc16c9b91bd894c7c42b56e93
Reviewed-by: Niels Weber <niels.weber@theqtcompany.com>
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
This commit is contained in:
@@ -4669,31 +4669,11 @@ void GdbEngine::doUpdateLocals(const UpdateParameters ¶ms)
|
|||||||
|
|
||||||
DebuggerCommand cmd("showData");
|
DebuggerCommand cmd("showData");
|
||||||
watchHandler()->appendFormatRequests(&cmd);
|
watchHandler()->appendFormatRequests(&cmd);
|
||||||
|
watchHandler()->appendWatchersAndTooltipRequests(&cmd);
|
||||||
|
|
||||||
cmd.arg("stringcutoff", action(MaximalStringLength)->value().toByteArray());
|
cmd.arg("stringcutoff", action(MaximalStringLength)->value().toByteArray());
|
||||||
cmd.arg("displaystringlimit", action(DisplayStringLimit)->value().toByteArray());
|
cmd.arg("displaystringlimit", action(DisplayStringLimit)->value().toByteArray());
|
||||||
|
|
||||||
// Re-create tooltip items that are not filters on existing local variables in
|
|
||||||
// the tooltip model.
|
|
||||||
cmd.beginList("watchers");
|
|
||||||
DebuggerToolTipContexts toolTips = DebuggerToolTipManager::pendingTooltips(this);
|
|
||||||
foreach (const DebuggerToolTipContext &p, toolTips) {
|
|
||||||
cmd.beginGroup();
|
|
||||||
cmd.arg("iname", p.iname);
|
|
||||||
cmd.arg("exp", p.expression.toLatin1().toHex());
|
|
||||||
cmd.endGroup();
|
|
||||||
}
|
|
||||||
|
|
||||||
QHashIterator<QByteArray, int> it(WatchHandler::watcherNames());
|
|
||||||
while (it.hasNext()) {
|
|
||||||
it.next();
|
|
||||||
cmd.beginGroup();
|
|
||||||
cmd.arg("iname", "watch." + QByteArray::number(it.value()));
|
|
||||||
cmd.arg("exp", it.key().toHex());
|
|
||||||
cmd.endGroup();
|
|
||||||
}
|
|
||||||
cmd.endList();
|
|
||||||
|
|
||||||
const static bool alwaysVerbose = !qgetenv("QTC_DEBUGGER_PYTHON_VERBOSE").isEmpty();
|
const static bool alwaysVerbose = !qgetenv("QTC_DEBUGGER_PYTHON_VERBOSE").isEmpty();
|
||||||
|
|
||||||
cmd.arg("passExceptions", alwaysVerbose);
|
cmd.arg("passExceptions", alwaysVerbose);
|
||||||
|
|||||||
@@ -826,6 +826,7 @@ void LldbEngine::doUpdateLocals(const UpdateParameters ¶ms)
|
|||||||
DebuggerCommand cmd("fetchLocals");
|
DebuggerCommand cmd("fetchLocals");
|
||||||
cmd.arg("nativeMixed", isNativeMixedActive());
|
cmd.arg("nativeMixed", isNativeMixedActive());
|
||||||
watchHandler()->appendFormatRequests(&cmd);
|
watchHandler()->appendFormatRequests(&cmd);
|
||||||
|
watchHandler()->appendWatchersAndTooltipRequests(&cmd);
|
||||||
|
|
||||||
const static bool alwaysVerbose = !qgetenv("QTC_DEBUGGER_PYTHON_VERBOSE").isEmpty();
|
const static bool alwaysVerbose = !qgetenv("QTC_DEBUGGER_PYTHON_VERBOSE").isEmpty();
|
||||||
cmd.arg("passexceptions", alwaysVerbose);
|
cmd.arg("passexceptions", alwaysVerbose);
|
||||||
@@ -835,29 +836,6 @@ void LldbEngine::doUpdateLocals(const UpdateParameters ¶ms)
|
|||||||
cmd.arg("partialVariable", params.partialVariable);
|
cmd.arg("partialVariable", params.partialVariable);
|
||||||
cmd.arg("sortStructMembers", boolSetting(SortStructMembers));
|
cmd.arg("sortStructMembers", boolSetting(SortStructMembers));
|
||||||
|
|
||||||
cmd.beginList("watchers");
|
|
||||||
|
|
||||||
// Watchers
|
|
||||||
QHashIterator<QByteArray, int> it(WatchHandler::watcherNames());
|
|
||||||
while (it.hasNext()) {
|
|
||||||
it.next();
|
|
||||||
cmd.beginGroup();
|
|
||||||
cmd.arg("iname", "watch." + QByteArray::number(it.value()));
|
|
||||||
cmd.arg("exp", it.key().toHex());
|
|
||||||
cmd.endGroup();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Tooltips
|
|
||||||
DebuggerToolTipContexts toolTips = DebuggerToolTipManager::pendingTooltips(this);
|
|
||||||
foreach (const DebuggerToolTipContext &p, toolTips) {
|
|
||||||
cmd.beginGroup();
|
|
||||||
cmd.arg("iname", p.iname);
|
|
||||||
cmd.arg("exp", p.expression.toLatin1().toHex());
|
|
||||||
cmd.endGroup();
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd.endList();
|
|
||||||
|
|
||||||
//cmd.arg("resultvarname", m_resultVarName);
|
//cmd.arg("resultvarname", m_resultVarName);
|
||||||
|
|
||||||
m_lastDebuggableCommand = cmd;
|
m_lastDebuggableCommand = cmd;
|
||||||
|
|||||||
@@ -571,34 +571,12 @@ void PdbEngine::updateLocals()
|
|||||||
DebuggerCommand cmd("updateData");
|
DebuggerCommand cmd("updateData");
|
||||||
cmd.arg("nativeMixed", isNativeMixedActive());
|
cmd.arg("nativeMixed", isNativeMixedActive());
|
||||||
watchHandler()->appendFormatRequests(&cmd);
|
watchHandler()->appendFormatRequests(&cmd);
|
||||||
|
watchHandler()->appendWatchersAndTooltipRequests(&cmd);
|
||||||
|
|
||||||
const static bool alwaysVerbose = !qgetenv("QTC_DEBUGGER_PYTHON_VERBOSE").isEmpty();
|
const static bool alwaysVerbose = !qgetenv("QTC_DEBUGGER_PYTHON_VERBOSE").isEmpty();
|
||||||
cmd.arg("passexceptions", alwaysVerbose);
|
cmd.arg("passexceptions", alwaysVerbose);
|
||||||
cmd.arg("fancy", boolSetting(UseDebuggingHelpers));
|
cmd.arg("fancy", boolSetting(UseDebuggingHelpers));
|
||||||
|
|
||||||
cmd.beginList("watchers");
|
|
||||||
|
|
||||||
// Watchers
|
|
||||||
QHashIterator<QByteArray, int> it(WatchHandler::watcherNames());
|
|
||||||
while (it.hasNext()) {
|
|
||||||
it.next();
|
|
||||||
cmd.beginGroup();
|
|
||||||
cmd.arg("iname", "watch." + QByteArray::number(it.value()));
|
|
||||||
cmd.arg("exp", it.key().toHex());
|
|
||||||
cmd.endGroup();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Tooltips
|
|
||||||
DebuggerToolTipContexts toolTips = DebuggerToolTipManager::pendingTooltips(this);
|
|
||||||
foreach (const DebuggerToolTipContext &p, toolTips) {
|
|
||||||
cmd.beginGroup();
|
|
||||||
cmd.arg("iname", p.iname);
|
|
||||||
cmd.arg("exp", p.expression.toLatin1().toHex());
|
|
||||||
cmd.endGroup();
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd.endList();
|
|
||||||
|
|
||||||
//cmd.arg("resultvarname", m_resultVarName);
|
//cmd.arg("resultvarname", m_resultVarName);
|
||||||
//m_lastDebuggableCommand = cmd;
|
//m_lastDebuggableCommand = cmd;
|
||||||
//m_lastDebuggableCommand.args.replace("\"passexceptions\":0", "\"passexceptions\":1");
|
//m_lastDebuggableCommand.args.replace("\"passexceptions\":0", "\"passexceptions\":1");
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
#include "debuggerengine.h"
|
#include "debuggerengine.h"
|
||||||
#include "debuggerinternalconstants.h"
|
#include "debuggerinternalconstants.h"
|
||||||
#include "debuggerprotocol.h"
|
#include "debuggerprotocol.h"
|
||||||
|
#include "debuggertooltipmanager.h"
|
||||||
#include "simplifytype.h"
|
#include "simplifytype.h"
|
||||||
#include "imageviewer.h"
|
#include "imageviewer.h"
|
||||||
#include "watchutils.h"
|
#include "watchutils.h"
|
||||||
@@ -1621,6 +1622,28 @@ void WatchHandler::appendFormatRequests(DebuggerCommand *cmd)
|
|||||||
cmd->endGroup();
|
cmd->endGroup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WatchHandler::appendWatchersAndTooltipRequests(DebuggerCommand *cmd)
|
||||||
|
{
|
||||||
|
cmd->beginList("watchers");
|
||||||
|
DebuggerToolTipContexts toolTips = DebuggerToolTipManager::pendingTooltips(m_model->m_engine);
|
||||||
|
foreach (const DebuggerToolTipContext &p, toolTips) {
|
||||||
|
cmd->beginGroup();
|
||||||
|
cmd->arg("iname", p.iname);
|
||||||
|
cmd->arg("exp", p.expression.toLatin1().toHex());
|
||||||
|
cmd->endGroup();
|
||||||
|
}
|
||||||
|
|
||||||
|
QHashIterator<QByteArray, int> it(WatchHandler::watcherNames());
|
||||||
|
while (it.hasNext()) {
|
||||||
|
it.next();
|
||||||
|
cmd->beginGroup();
|
||||||
|
cmd->arg("iname", "watch." + QByteArray::number(it.value()));
|
||||||
|
cmd->arg("exp", it.key().toHex());
|
||||||
|
cmd->endGroup();
|
||||||
|
}
|
||||||
|
cmd->endList();
|
||||||
|
}
|
||||||
|
|
||||||
void WatchHandler::addDumpers(const GdbMi &dumpers)
|
void WatchHandler::addDumpers(const GdbMi &dumpers)
|
||||||
{
|
{
|
||||||
foreach (const GdbMi &dumper, dumpers.children()) {
|
foreach (const GdbMi &dumper, dumpers.children()) {
|
||||||
|
|||||||
@@ -130,6 +130,9 @@ public:
|
|||||||
static QStringList watchedExpressions();
|
static QStringList watchedExpressions();
|
||||||
static QHash<QByteArray, int> watcherNames();
|
static QHash<QByteArray, int> watcherNames();
|
||||||
|
|
||||||
|
void appendFormatRequests(DebuggerCommand *cmd);
|
||||||
|
void appendWatchersAndTooltipRequests(DebuggerCommand *cmd);
|
||||||
|
|
||||||
QByteArray typeFormatRequests() const;
|
QByteArray typeFormatRequests() const;
|
||||||
QByteArray individualFormatRequests() const;
|
QByteArray individualFormatRequests() const;
|
||||||
|
|
||||||
@@ -150,7 +153,6 @@ public:
|
|||||||
|
|
||||||
void setCurrentItem(const QByteArray &iname);
|
void setCurrentItem(const QByteArray &iname);
|
||||||
void updateWatchersWindow();
|
void updateWatchersWindow();
|
||||||
void appendFormatRequests(DebuggerCommand *cmd);
|
|
||||||
|
|
||||||
void insertItem(WatchItem *item); // Takes ownership.
|
void insertItem(WatchItem *item); // Takes ownership.
|
||||||
void removeItemByIName(const QByteArray &iname);
|
void removeItemByIName(const QByteArray &iname);
|
||||||
|
|||||||
Reference in New Issue
Block a user