diff options
| author | David Schulz <david.schulz@digia.com> | 2013-06-17 15:09:27 +0200 |
|---|---|---|
| committer | David Schulz <david.schulz@digia.com> | 2013-06-18 11:12:02 +0200 |
| commit | 327e7bdf6fbc3bc3bc92e8cde0d2db5d9ae761e0 (patch) | |
| tree | 5ff65a521b8063e8038fe626f165090414df00c0 /src/plugins/debugger/cdb/cdbengine.cpp | |
| parent | 812b321738882546041bf2d5a5c0ae0f04b23606 (diff) | |
| download | qt-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.cpp | 20 |
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); |
