summaryrefslogtreecommitdiff
path: root/src/plugins/debugger/cdb/cdbengine.cpp
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@digia.com>2013-06-17 15:09:27 +0200
committerDavid Schulz <david.schulz@digia.com>2013-06-18 11:12:02 +0200
commit327e7bdf6fbc3bc3bc92e8cde0d2db5d9ae761e0 (patch)
tree5ff65a521b8063e8038fe626f165090414df00c0 /src/plugins/debugger/cdb/cdbengine.cpp
parent812b321738882546041bf2d5a5c0ae0f04b23606 (diff)
downloadqt-creator-327e7bdf6fbc3bc3bc92e8cde0d2db5d9ae761e0.tar.gz
Debugger: Fix exception caused by wow64exts.info.
Task-number: QTCREATORBUG-9526 Change-Id: I79d09a7e975576ee68db3645142a567b4af4c646 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Diffstat (limited to 'src/plugins/debugger/cdb/cdbengine.cpp')
-rw-r--r--src/plugins/debugger/cdb/cdbengine.cpp20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp
index efeac79cc5..d66f6085e9 100644
--- a/src/plugins/debugger/cdb/cdbengine.cpp
+++ b/src/plugins/debugger/cdb/cdbengine.cpp
@@ -2243,7 +2243,7 @@ void CdbEngine::processStop(const GdbMi &stopReason, bool conditionalBreakPointT
executeStepOut();
return;
case ParseStackWow64:
- postBuiltinCommand("!wow64exts.info", 0, &CdbEngine::handleCheckWow64,
+ postBuiltinCommand("lm m wow64", 0, &CdbEngine::handleCheckWow64,
0, qVariantFromValue(stack));
break;
}
@@ -2275,15 +2275,17 @@ void CdbEngine::processStop(const GdbMi &stopReason, bool conditionalBreakPointT
void CdbEngine::handleCheckWow64(const CdbBuiltinCommandPtr &cmd)
{
- // Using the stack command from the wow64exts cdb extension to
- // check if there is a 32bit subsystem in this debuggee.
- if (cmd->reply.first().startsWith("Could not get the address of the 32bit PEB")) {
- m_wow64State = noWow64Stack;
- if (cmd->cookie.canConvert<GdbMi>())
- parseStackTrace(qvariant_cast<GdbMi>(cmd->cookie), false);
+ // Using the lm (list modules) command to check if there is a 32 bit subsystem in this debuggee.
+ // expected reply if there is a 32 bit stack:
+ // start end module name
+ // 00000000`77490000 00000000`774d5000 wow64 (deferred)
+ if (cmd->reply.value(1).contains("wow64")) {
+ postBuiltinCommand("k", 0, &CdbEngine::ensureUsing32BitStackInWow64, 0, cmd->cookie);
return;
}
- postBuiltinCommand("k", 0, &CdbEngine::ensureUsing32BitStackInWow64, 0, cmd->cookie);
+ m_wow64State = noWow64Stack;
+ if (cmd->cookie.canConvert<GdbMi>())
+ parseStackTrace(qvariant_cast<GdbMi>(cmd->cookie), false);
}
void CdbEngine::ensureUsing32BitStackInWow64(const CdbEngine::CdbBuiltinCommandPtr &cmd)
@@ -2990,7 +2992,7 @@ void CdbEngine::handleStackTrace(const CdbExtensionCommandPtr &command)
GdbMi data;
data.fromString(command->reply);
if (parseStackTrace(data, false) == ParseStackWow64) {
- postBuiltinCommand("!wow64exts.info", 0, &CdbEngine::handleCheckWow64,
+ postBuiltinCommand("lm m wow64", 0, &CdbEngine::handleCheckWow64,
0, qVariantFromValue(data));
}
postCommandSequence(command->commandSequence);