diff options
Diffstat (limited to 'src/plugins/debugger/cdb/cdbdumperhelper.cpp')
-rw-r--r-- | src/plugins/debugger/cdb/cdbdumperhelper.cpp | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/src/plugins/debugger/cdb/cdbdumperhelper.cpp b/src/plugins/debugger/cdb/cdbdumperhelper.cpp index 624a776bec..46429bab5d 100644 --- a/src/plugins/debugger/cdb/cdbdumperhelper.cpp +++ b/src/plugins/debugger/cdb/cdbdumperhelper.cpp @@ -307,7 +307,8 @@ CdbDumperHelper::CdbDumperHelper(DebuggerManager *manager, m_outBufferSize(0), m_buffer(0), m_dumperCallThread(0), - m_goCommand(goCommand(m_dumperCallThread)) + m_goCommand(goCommand(m_dumperCallThread)), + m_fastSymbolResolution(true) { } @@ -435,19 +436,29 @@ static inline bool getSymbolAddress(CIDebugSymbols *sg, bool CdbDumperHelper::initResolveSymbols(QString *errorMessage) { - // Resolve the symbols we need (potentially namespaced). + // Resolve the symbols we need. // There is a 'qDumpInBuffer' in QtCore as well. if (loadDebug) qDebug() << Q_FUNC_INFO; - m_dumpObjectSymbol = QLatin1String("*qDumpObjectData440"); - QString inBufferSymbol = QLatin1String("*qDumpInBuffer"); - QString outBufferSymbol = QLatin1String("*qDumpOutBuffer"); + bool rc; const QString dumperModuleName = QLatin1String(dumperModuleNameC); - bool rc = resolveSymbol(m_coreEngine->interfaces().debugSymbols, &m_dumpObjectSymbol, errorMessage) == ResolveSymbolOk - && resolveSymbol(m_coreEngine->interfaces().debugSymbols, dumperModuleName, &inBufferSymbol, errorMessage) == ResolveSymbolOk - && resolveSymbol(m_coreEngine->interfaces().debugSymbols, dumperModuleName, &outBufferSymbol, errorMessage) == ResolveSymbolOk; - if (!rc) - return false; + QString inBufferSymbol, outBufferSymbol; + if (m_fastSymbolResolution) { + // Symbols in the debugging helpers are never namespaced. + m_dumpObjectSymbol = dumperModuleName + QLatin1String("!qDumpObjectData440"); + inBufferSymbol = dumperModuleName + QLatin1String("!qDumpInBuffer"); + outBufferSymbol = dumperModuleName + QLatin1String("!qDumpOutBuffer"); + } else { + // Classical approach of loading the dumper symbols. Takes some time though. + m_dumpObjectSymbol = QLatin1String("*qDumpObjectData440"); + inBufferSymbol = QLatin1String("*qDumpInBuffer"); + outBufferSymbol = QLatin1String("*qDumpOutBuffer"); + bool rc = resolveSymbol(m_coreEngine->interfaces().debugSymbols, &m_dumpObjectSymbol, errorMessage) == ResolveSymbolOk + && resolveSymbol(m_coreEngine->interfaces().debugSymbols, dumperModuleName, &inBufferSymbol, errorMessage) == ResolveSymbolOk + && resolveSymbol(m_coreEngine->interfaces().debugSymbols, dumperModuleName, &outBufferSymbol, errorMessage) == ResolveSymbolOk; + if (!rc) + return false; + } // Determine buffer addresses, sizes and alloc buffer rc = getSymbolAddress(m_coreEngine->interfaces().debugSymbols, inBufferSymbol, &m_inBufferAddress, &m_inBufferSize, errorMessage) && getSymbolAddress(m_coreEngine->interfaces().debugSymbols, outBufferSymbol, &m_outBufferAddress, &m_outBufferSize, errorMessage); |