Commit 27382f75 authored by hjk's avatar hjk
Browse files

debuger: fix insertion of nested WatchData

parent 75ade294
......@@ -2834,7 +2834,7 @@ static void qDumpQSharedPointer(QDumper &d)
static void qDumpQString(QDumper &d)
{
qCheckAccess(deref(d.data));
//qCheckAccess(deref(d.data));
const QString &str = *reinterpret_cast<const QString *>(d.data);
const int size = str.size();
......
......@@ -316,9 +316,10 @@ void DebuggerManager::init()
// Tooltip
//QTreeView *tooltipView = qobject_cast<QTreeView *>(m_tooltipWindow);
//tooltipView->setModel(m_watchHandler->model(TooltipsWatch));
//qRegisterMetaType<WatchData>("Debugger::Internal::WatchData");
qRegisterMetaType<WatchData>("WatchData");
connect(m_watchHandler, SIGNAL(watchDataUpdateNeeded(WatchData)),
this, SLOT(updateWatchData(WatchData)));
this, SLOT(updateWatchData(WatchData)), Qt::QueuedConnection);
m_continueAction = new QAction(this);
m_continueAction->setText(tr("Continue"));
......
......@@ -83,7 +83,7 @@ namespace Internal {
using namespace Debugger::Constants;
//#define DEBUG_PENDING 1
//#define DEBUG_SUBITEM 1
#define DEBUG_SUBITEM 1
#if DEBUG_PENDING
# define PENDING_DEBUG(s) qDebug() << s
......@@ -2958,6 +2958,10 @@ void GdbEngine::runDebuggingHelper(const WatchData &data0, bool dumpChildren)
void GdbEngine::createGdbVariable(const WatchData &data)
{
if (data.iname == _("local.flist.0")) {
int i = 1;
Q_UNUSED(i);
}
postCommand(_("-var-delete \"%1\"").arg(data.iname), WatchUpdate);
QString exp = data.exp;
if (exp.isEmpty() && data.addr.startsWith(__("0x")))
......@@ -3401,11 +3405,17 @@ void GdbEngine::handleDebuggingHelperValue2(const GdbResultRecord &record,
setWatchDataType(data, record.data.findChild("type"));
setWatchDataDisplayedType(data, record.data.findChild("displaytype"));
handleChildren(data, contents);
QList<WatchData> list;
handleChildren(data, contents, &list);
//for (int i = 0; i != list.size(); ++i)
// qDebug() << "READ: " << list.at(i).toString();
qq->watchHandler()->insertBulkData(list);
}
void GdbEngine::handleChildren(const WatchData &data0, const GdbMi &item)
void GdbEngine::handleChildren(const WatchData &data0, const GdbMi &item,
QList<WatchData> *list)
{
//qDebug() << "HANDLE CHILDREN: " << data0.toString() << item.toString();
WatchData data = data0;
if (!qq->watchHandler()->isExpandedIName(data.iname))
data.setChildrenUnneeded();
......@@ -3432,16 +3442,16 @@ void GdbEngine::handleChildren(const WatchData &data0, const GdbMi &item)
setWatchDataValueToolTip(data, item.findChild("valuetooltip"),
item.findChild("valuetooltipencoded").data().toInt());
setWatchDataValueDisabled(data, item.findChild("valuedisabled"));
//qDebug() << "HANDLE CHILDREN: " << data.toString();
list->append(data);
// try not to repeat data too often
WatchData childtemplate;
setWatchDataType(childtemplate, item.findChild("childtype"));
setWatchDataChildCount(childtemplate, item.findChild("childnumchild"));
//qDebug() << "CHILD TEMPLATE:" << childtemplate.toString();
qDebug() << "CHILD TEMPLATE:" << childtemplate.toString();
qq->watchHandler()->insertData(data);
int i = 0;
QList<WatchData> list;
foreach (GdbMi child, children.children()) {
WatchData data1 = childtemplate;
GdbMi name = child.findChild("name");
......@@ -3463,11 +3473,9 @@ void GdbEngine::handleChildren(const WatchData &data0, const GdbMi &item)
//data1.name += " (" + skey + ")";
data1.name = skey;
}
handleChildren(data1, child);
list.append(data1);
handleChildren(data1, child, list);
++i;
}
qq->watchHandler()->insertBulkData(list);
}
void GdbEngine::handleDebuggingHelperValue3(const GdbResultRecord &record,
......
......@@ -241,7 +241,8 @@ private:
void debugMessage(const QString &msg);
bool showToolTip();
void handleChildren(const WatchData &parent, const GdbMi &child);
void handleChildren(const WatchData &parent, const GdbMi &child,
QList<WatchData> *insertions);
const bool m_dumperInjectionLoad;
OutputCollector m_outputCollector;
......
......@@ -1003,7 +1003,7 @@ void WatchHandler::insertBulkData(const QList<WatchData> &list)
{
if (list.isEmpty())
return;
QHash<QString, QList<WatchData> > hash;
QMap<QString, QList<WatchData> > hash;
foreach (const WatchData &data, list) {
if (data.isSomethingNeeded())
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment