From 55b4e6d383d7d88ce32cf19ec87d85864ddb15fd Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Wed, 13 Jan 2010 10:36:37 +0100 Subject: [PATCH] Debugger/CDB: Increase limits on string size in watch data. Introduce truncation in item view instead (full value visible in ToolTip). Reviewed-by: hjk Task-number: QTCREATORBUG-305 --- .../debugger/cdb/cdbsymbolgroupcontext.cpp | 12 ++++++------ src/plugins/debugger/watchhandler.cpp | 16 ++++++++++++++-- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/plugins/debugger/cdb/cdbsymbolgroupcontext.cpp b/src/plugins/debugger/cdb/cdbsymbolgroupcontext.cpp index b37c8218890..72f7a59e84d 100644 --- a/src/plugins/debugger/cdb/cdbsymbolgroupcontext.cpp +++ b/src/plugins/debugger/cdb/cdbsymbolgroupcontext.cpp @@ -750,9 +750,10 @@ static inline bool getUnsignedHexValue(CIDebugSymbolGroup *sg, int index, quint6 return getUnsignedHexValue(stringValue, value); } +enum { maxStringLength = 4096 }; + int CdbSymbolGroupContext::dumpQString(CIDebugDataSpaces *ds, WatchData *wd) { - const int maxLength = 40; QString errorMessage; unsigned long stringIndex; if (!lookupPrefix(wd->iname, &stringIndex)) @@ -774,9 +775,9 @@ int CdbSymbolGroupContext::dumpQString(CIDebugDataSpaces *ds, WatchData *wd) if (!getUnsignedHexValue(m_symbolGroup, arrayIndex, &array)) return 5; // Fetch - const bool truncated = size > maxLength; + const bool truncated = size > maxStringLength; if (truncated) - size = maxLength; + size = maxStringLength; const QChar doubleQuote = QLatin1Char('"'); QString value; if (size > 0) { @@ -808,7 +809,6 @@ int CdbSymbolGroupContext::dumpQString(CIDebugDataSpaces *ds, WatchData *wd) int CdbSymbolGroupContext::dumpStdString(WatchData *wd) { - const int maxLength = 40; QString errorMessage; unsigned long stringIndex; if (!lookupPrefix(wd->iname, &stringIndex)) @@ -835,8 +835,8 @@ int CdbSymbolGroupContext::dumpStdString(WatchData *wd) if (quotePos == -1) return 1; bufValue.remove(0, quotePos); - if (bufValue.size() > maxLength) { - bufValue.truncate(maxLength); + if (bufValue.size() > maxStringLength) { + bufValue.truncate(maxStringLength); bufValue += QLatin1String("...\""); } wd->setValue(bufValue); diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index 3723d5b6278..661df2cc8ab 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -727,6 +727,18 @@ void WatchModel::emitDataChanged(int column, const QModelIndex &parentIndex) emitDataChanged(column, index(i, 0, parentIndex)); } +// Truncate value for item view, maintaining quotes +static inline QString truncateValue(QString v) +{ + enum { maxLength = 512 }; + if (v.size() < maxLength) + return v; + const bool isQuoted = v.endsWith(QLatin1Char('"')); // check for 'char* "Hallo"' + v.truncate(maxLength); + v += isQuoted ? QLatin1String("...\"") : QLatin1String("..."); + return v; +} + QVariant WatchModel::data(const QModelIndex &idx, int role) const { const WatchItem &data = *watchItem(idx); @@ -735,9 +747,9 @@ QVariant WatchModel::data(const QModelIndex &idx, int role) const case Qt::DisplayRole: { switch (idx.column()) { case 0: return data.name; - case 1: return formattedValue(data, + case 1: return truncateValue(formattedValue(data, m_handler->m_individualFormats.value(data.iname, -1), - m_handler->m_typeFormats.value(data.type, -1)); + m_handler->m_typeFormats.value(data.type, -1))); case 2: if (!data.displayedType.isEmpty()) return data.displayedType; -- GitLab