forked from qt-creator/qt-creator
debugger: add option to automatically derefence pointers in locals&watchers
This commit is contained in:
@@ -203,6 +203,9 @@ GdbEngine::GdbEngine(DebuggerManager *manager) :
|
||||
connect(this, SIGNAL(applicationOutputAvailable(QString)),
|
||||
m_manager, SLOT(showApplicationOutput(QString)),
|
||||
Qt::QueuedConnection);
|
||||
|
||||
connect(theDebuggerAction(AutoDerefPointers), SIGNAL(valueChanged(QVariant)),
|
||||
this, SLOT(setAutoDerefPointers(QVariant)));
|
||||
}
|
||||
|
||||
void GdbEngine::connectDebuggingHelperActions()
|
||||
@@ -2703,6 +2706,13 @@ void GdbEngine::setUseDebuggingHelpers(const QVariant &on)
|
||||
updateLocals();
|
||||
}
|
||||
|
||||
void GdbEngine::setAutoDerefPointers(const QVariant &on)
|
||||
{
|
||||
Q_UNUSED(on)
|
||||
setTokenBarrier();
|
||||
updateLocals();
|
||||
}
|
||||
|
||||
bool GdbEngine::hasDebuggingHelperForType(const QString &type) const
|
||||
{
|
||||
if (!theDebuggerBoolSetting(UseDebuggingHelpers))
|
||||
@@ -2864,22 +2874,23 @@ void GdbEngine::updateSubItem(const WatchData &data0)
|
||||
#if DEBUG_SUBITEM
|
||||
qDebug() << "IT'S A POINTER";
|
||||
#endif
|
||||
#if 1
|
||||
data.setChildrenUnneeded();
|
||||
insertData(data);
|
||||
WatchData data1;
|
||||
data1.iname = data.iname + QLatin1String(".*");
|
||||
data1.name = QLatin1Char('*') + data.name;
|
||||
data1.exp = QLatin1String("(*(") + data.exp + QLatin1String("))");
|
||||
data1.type = stripPointerType(data.type);
|
||||
data1.setValueNeeded();
|
||||
insertData(data1);
|
||||
#else
|
||||
// Try automatic dereferentiation
|
||||
data.exp = _("*(") + data.exp + _(")");
|
||||
data.type = data.type + _("."); // FIXME: fragile HACK to avoid recursion
|
||||
insertData(data);
|
||||
#endif
|
||||
|
||||
if (theDebuggerBoolSetting(AutoDerefPointers)) {
|
||||
// Try automatic dereferentiation
|
||||
data.exp = _("(*(") + data.exp + _("))");
|
||||
data.type = data.type + _("."); // FIXME: fragile HACK to avoid recursion
|
||||
insertData(data);
|
||||
} else {
|
||||
data.setChildrenUnneeded();
|
||||
insertData(data);
|
||||
WatchData data1;
|
||||
data1.iname = data.iname + QLatin1String(".*");
|
||||
data1.name = QLatin1Char('*') + data.name;
|
||||
data1.exp = QLatin1String("(*(") + data.exp + QLatin1String("))");
|
||||
data1.type = stripPointerType(data.type);
|
||||
data1.setValueNeeded();
|
||||
insertData(data1);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user