diff --git a/src/plugins/debugger/cdb/cdbdumperhelper.cpp b/src/plugins/debugger/cdb/cdbdumperhelper.cpp index 164b0ad3cc14d983ca1465b22525145f025f5e78..cf2014ef277f6f28c16c93f107dbe779f048b8dc 100644 --- a/src/plugins/debugger/cdb/cdbdumperhelper.cpp +++ b/src/plugins/debugger/cdb/cdbdumperhelper.cpp @@ -570,7 +570,7 @@ CdbDumperHelper::CallResult static inline QString msgDumpFailed(const WatchData &wd, const QString *why) { - return QString::fromLatin1("Unable to dump '%1' (%2): %3").arg(wd.name, wd.type, *why); + return QString::fromLatin1("Unable to dump '%1' (%2): %3").arg(QString::fromLatin1(wd.iname), wd.type, *why); } static inline QString msgNotHandled(const QString &type) @@ -582,10 +582,12 @@ CdbDumperHelper::DumpResult CdbDumperHelper::dumpType(const WatchData &wd, bool QList<WatchData> *result, QString *errorMessage) { if (dumpDebug || debugCDBExecution) - qDebug() << ">dumpType() thread: " << m_dumperCallThread << " state: " << m_state << wd.type << QTime::currentTime().toString(); + qDebug() << ">dumpType() thread: " << m_dumperCallThread << " state: " << m_state + << wd.iname << wd.type << QTime::currentTime().toString(); const CdbDumperHelper::DumpResult rc = dumpTypeI(wd, dumpChildren, result, errorMessage); if (dumpDebug) - qDebug() << "<dumpType() state: " << m_state << wd.type << " returns " << rc << *errorMessage << QTime::currentTime().toString(); + qDebug() << "<dumpType() state: " << m_state << wd.iname + << wd.type << " returns " << rc << *errorMessage << QTime::currentTime().toString(); return rc; } @@ -644,7 +646,7 @@ CdbDumperHelper::DumpResult CdbDumperHelper::dumpTypeI(const WatchData &wd, bool // Now evaluate const QString message = QCoreApplication::translate("Debugger::Internal::CdbDumperHelper", "Querying dumpers for '%1'/'%2' (%3)"). - arg(wd.name, wd.exp, wd.type); + arg(QString::fromLatin1(wd.iname), wd.exp, wd.type); m_manager->showDebuggerOutput(LogMisc, message); const DumpExecuteResult der = executeDump(wd, td, dumpChildren, result, errorMessage); diff --git a/src/plugins/debugger/cdb/cdbexceptionutils.cpp b/src/plugins/debugger/cdb/cdbexceptionutils.cpp index 774ee3624df75b76cfe50a2cd422cd0daa2d4110..7bcebf3ad1e42bc95c0c6d479564181aaae31a0f 100644 --- a/src/plugins/debugger/cdb/cdbexceptionutils.cpp +++ b/src/plugins/debugger/cdb/cdbexceptionutils.cpp @@ -165,6 +165,7 @@ void formatException(const EXCEPTION_RECORD64 *e, QTextStream &str) break; case winExceptionDllNotFound: str << "DLL not found"; + break; case winExceptionDllEntryPointNoFound: str << "DLL entry point not found"; break; @@ -174,6 +175,12 @@ void formatException(const EXCEPTION_RECORD64 *e, QTextStream &str) case winExceptionMissingSystemFile: str << "System file is missing"; break; + case winExceptionRpcServerUnavailable: + str << "RPC server unavailable"; + break; + case winExceptionRpcServerInvalid: + str << "Invalid RPC server"; + break; case EXCEPTION_ACCESS_VIOLATION: { const bool writeOperation = e->ExceptionInformation[0]; str << (writeOperation ? "write" : "read") @@ -270,6 +277,7 @@ bool isFatalException(LONG code) case EXCEPTION_SINGLE_STEP: case winExceptionStartupCompleteTrap: // Mysterious exception at start of application case winExceptionRpcServerUnavailable: + case winExceptionRpcServerInvalid: case winExceptionDllNotFound: case winExceptionDllEntryPointNoFound: case winExceptionCppException: diff --git a/src/plugins/debugger/cdb/cdbexceptionutils.h b/src/plugins/debugger/cdb/cdbexceptionutils.h index a8456209a1c55fbecdf2e8dca99001d1e5f283c2..8c6fb2174d685230c11b0e52e5c0eace076549dd 100644 --- a/src/plugins/debugger/cdb/cdbexceptionutils.h +++ b/src/plugins/debugger/cdb/cdbexceptionutils.h @@ -50,6 +50,7 @@ namespace Internal { enum { winExceptionCppException = 0xe06d7363, winExceptionStartupCompleteTrap = 0x406d1388, winExceptionRpcServerUnavailable = 0x6ba, + winExceptionRpcServerInvalid = 0x6a6, winExceptionDllNotFound = 0xc0000135, winExceptionDllEntryPointNoFound = 0xc0000139, winExceptionDllInitFailed = 0xc0000142, diff --git a/src/plugins/debugger/cdb/cdbsymbolgroupcontext.cpp b/src/plugins/debugger/cdb/cdbsymbolgroupcontext.cpp index b4bc8492c8db3e3e0764592c0cccbcd0fe2f3afc..a1a7f526840f51e092f4fc0c627007cd70452298 100644 --- a/src/plugins/debugger/cdb/cdbsymbolgroupcontext.cpp +++ b/src/plugins/debugger/cdb/cdbsymbolgroupcontext.cpp @@ -231,7 +231,7 @@ bool WatchHandleDumperInserter::expandPointerToDumpable(const WatchData &wd, QSt const QString hexAddrS = wd.value.mid(0, classPos); if (m_hexNullPattern.exactMatch(hexAddrS)) break; - const QString type = stripPointerType(wd.value.mid(classPos + 7)); + const QString type = stripPointerType(wd.type); WatchData derefedWd; derefedWd.setType(type); derefedWd.setAddress(hexAddrS); @@ -395,7 +395,8 @@ unsigned CdbSymbolGroupContext::watchDataAt(unsigned long index, WatchData *wd) bool CdbSymbolGroupContext::populateModelInitially(WatchHandler *wh, QString *errorMessage) { if (debugCDBWatchHandling) - qDebug() << "populateModelInitially dumpers=" << m_useDumpers; + qDebug() << "populateModelInitially dumpers=" << m_useDumpers + << toString(); // Recurse down items that are initially expanded in the view, stop processing for // dumper items. const CdbSymbolGroupRecursionContext rctx(this, OwnerSymbolGroupDumper); diff --git a/src/plugins/debugger/cdb/symbolgroupcontext.cpp b/src/plugins/debugger/cdb/symbolgroupcontext.cpp index 1f6c383286b5c696903cc79637df6e41c7d5aa1b..92c5a2099f1500d2c6f8df349dc45859bbba414c 100644 --- a/src/plugins/debugger/cdb/symbolgroupcontext.cpp +++ b/src/plugins/debugger/cdb/symbolgroupcontext.cpp @@ -37,7 +37,7 @@ #include <QtCore/QDebug> enum { debug = 0 }; -enum { debugInternalDumpers = 0 }; +enum { debugInternalDumpers = 1 }; // name separator for shadowed variables static const char iNameShadowDelimiter = '#'; @@ -578,6 +578,7 @@ unsigned SymbolGroupContext::dumpValue(unsigned long index, switch (drc) { case 0: rc |= InternalDumperSucceeded; + rc &= ~HasChildren; break; case 1: rc |= InternalDumperError; @@ -594,6 +595,7 @@ unsigned SymbolGroupContext::dumpValue(unsigned long index, switch (drc) { case 0: rc |= InternalDumperSucceeded; + rc &= ~HasChildren; break; case 1: rc |= InternalDumperError; @@ -610,9 +612,10 @@ unsigned SymbolGroupContext::dumpValue(unsigned long index, QString msg; QTextStream str(&msg); str.setIntegerBase(16); - str << "SymbolGroupContext::dump rc=0x" << rc << ' ' << *typeNameIn; + str << "SymbolGroupContext::dump rc=0x" << rc; str.setIntegerBase(10); - str << " (" << *typeIdIn << ") '" << *nameIn << "' '" << *valueIn << '\''; + str << " Type='" << *typeNameIn; + str << " (" << *typeIdIn << ") Name='" << *nameIn << "' Value='" << *valueIn << '\''; qDebug("%s", qPrintable(msg)); } return rc;