From 7bfa174b87259f30f783d62a2b6475ac8dcd7f49 Mon Sep 17 00:00:00 2001 From: David Schulz <david.schulz@digia.com> Date: Wed, 29 Oct 2014 10:56:44 +0100 Subject: [PATCH] CdbExt: Fix dumping of QByteArray inside QPrivate class. Change-Id: I9e9b7af1cc2c910b6c5865a611963b371248f90e Reviewed-by: Christian Stenger <christian.stenger@digia.com> --- src/libs/qtcreatorcdbext/symbolgroupvalue.cpp | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp b/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp index c189849c91e..00c70b1bb2d 100644 --- a/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp +++ b/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp @@ -1789,12 +1789,25 @@ static bool dumpQByteArrayFromQPrivateClass(const SymbolGroupValue &v, const ULONG64 byteArrayAddress = addressOfQPrivateMember(v, mode, additionalOffset); if (!byteArrayAddress) return false; - const std::string dumpType = QtInfo::get(v.context()).prependQtCoreModule("QByteArray"); - const std::string symbolName = SymbolGroupValue::pointedToSymbolName(byteArrayAddress , dumpType); + std::string dumpType = QtInfo::get(v.context()).prependQtCoreModule("QByteArray"); + std::string symbolName = SymbolGroupValue::pointedToSymbolName(byteArrayAddress , dumpType); + if (SymbolGroupValue::verbose > 1) + DebugPrint() << "dumpQByteArrayFromQPrivateClass of " << v.name() << '/' + << v.type() << " mode=" << mode + << " offset=" << additionalOffset << " address=0x" << std::hex << byteArrayAddress + << std::dec << " expr=" << symbolName; SymbolGroupNode *byteArrayNode = v.node()->symbolGroup()->addSymbol(v.module(), symbolName, std::string(), &errorMessage); - if (!byteArrayNode) - return false; + if (!byteArrayNode && errorMessage.find("DEBUG_ANY_ID") != std::string::npos) { + // HACK: + // In some rare cases the AddSymbol can't create a node with a given module name, + // but is able to add the symbol without any modulename. + dumpType = QtInfo::get(v.context()).prependModuleAndNameSpace("QByteArray", "", QtInfo::get(v.context()).nameSpace); + symbolName = SymbolGroupValue::pointedToSymbolName(byteArrayAddress , dumpType); + byteArrayNode = v.node()->symbolGroup()->addSymbol(v.module(), symbolName, std::string(), &errorMessage); + if (!byteArrayNode) + return false; + } return dumpQByteArray(SymbolGroupValue(byteArrayNode, v.context()), str); } -- GitLab