From 327e7bdf6fbc3bc3bc92e8cde0d2db5d9ae761e0 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 17 Jun 2013 15:09:27 +0200 Subject: [PATCH] Debugger: Fix exception caused by wow64exts.info. Task-number: QTCREATORBUG-9526 Change-Id: I79d09a7e975576ee68db3645142a567b4af4c646 Reviewed-by: Friedemann Kleint --- src/plugins/debugger/cdb/cdbengine.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index efeac79cc5f..d66f6085e92 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()) - parseStackTrace(qvariant_cast(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()) + parseStackTrace(qvariant_cast(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);