diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index 96440d4e7df728d4025c2432c3dcfb0995ccb795..78ec65d5b0477eb2cc0b42fecefa9a537278c5c9 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -352,7 +352,8 @@ CdbEngine::CdbEngine(const DebuggerStartParameters &sp, m_notifyEngineShutdownOnTermination(false), m_hasDebuggee(false), m_elapsedLogTime(0), - m_sourceStepInto(false) + m_sourceStepInto(false), + m_wX86BreakpointCount(0) { Utils::SavedAction *assemblerAction = theAssemblerAction(); m_operateByInstructionPending = assemblerAction->isChecked(); @@ -1430,7 +1431,7 @@ enum StopActionFlags unsigned CdbEngine::examineStopReason(const QByteArray &messageIn, QString *message, - QString *exceptionBoxMessage) const + QString *exceptionBoxMessage) { // Report stop reason (GDBMI) GdbMi stopReason; @@ -1462,10 +1463,16 @@ unsigned CdbEngine::examineStopReason(const QByteArray &messageIn, // pulls DLLs. Avoid showing a 'stopped' Message box. if (exception.exceptionCode == winExceptionStartupCompleteTrap) return StopNotifyStop; - // WOW 64 breakpoint: just report in log and continue + // WOW 64 breakpoint: Report in log and continue the first one, + // subsequent ones are caused by interrupting the application. if (exception.exceptionCode == winExceptionWX86Breakpoint) { - *message = description; - return StopIgnoreContinue|StopReportLog; + if (m_wX86BreakpointCount++) { + *message = tr("Interrupted (%1)").arg(description); + return StopReportStatusMessage|StopNotifyStop; + } else { + *message = description; + return StopIgnoreContinue|StopReportLog; + } } if (isDebuggerWinException(exception.exceptionCode)) { *message = msgInterrupted(); diff --git a/src/plugins/debugger/cdb/cdbengine.h b/src/plugins/debugger/cdb/cdbengine.h index 34405dc4b0d3d8c750533136951930ade11de51f..bec8579cd0887ff238183eeef592a55eecb98b76 100644 --- a/src/plugins/debugger/cdb/cdbengine.h +++ b/src/plugins/debugger/cdb/cdbengine.h @@ -153,7 +153,7 @@ private: enum SpecialStopMode { NoSpecialStop, SpecialStopSynchronizeBreakpoints }; unsigned examineStopReason(const QByteArray &messageIn, QString *message, - QString *exceptionBoxMessage) const; + QString *exceptionBoxMessage); bool commandsPending() const; void handleExtensionMessage(char t, int token, const QByteArray &what, const QByteArray &message); bool doSetupEngine(QString *errorMessage); @@ -214,6 +214,7 @@ private: mutable int m_elapsedLogTime; QByteArray m_extensionMessageBuffer; bool m_sourceStepInto; + unsigned m_wX86BreakpointCount; }; } // namespace Internal