Debugger[New CDB]: Ignore only first WOW64 breakpoint.

Subsequent ones are caused by interrupts.
This commit is contained in:
Friedemann Kleint
2011-01-17 15:18:13 +01:00
parent 7d72445bc0
commit 8108bb0c89
2 changed files with 14 additions and 6 deletions

View File

@@ -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();