diff --git a/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp b/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp index c189849c91e198a9cc5be4e6e7b934dcfb08028d..00c70b1bb2d5ea57dc4557474fe5e0665c063501 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); }