summaryrefslogtreecommitdiff
path: root/src/plugins/debugger/cdb/cdbdumperhelper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/debugger/cdb/cdbdumperhelper.cpp')
-rw-r--r--src/plugins/debugger/cdb/cdbdumperhelper.cpp31
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);