1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

bug 415362: [visualizer] occasional exception when exercising step into

selection
https://bugs.eclipse.org/bugs/show_bug.cgi?id=415362

Change-Id: Ifea7bc53881bbb1d10dfd55c85fb3116dcb0817d
Signed-off-by: Alvaro Sanchez-Leon <alvsan09@gmail.com>
Reviewed-on: https://git.eclipse.org/r/16106
Reviewed-by: Marc Khouzam <marc.khouzam@ericsson.com>
IP-Clean: Marc Khouzam <marc.khouzam@ericsson.com>
Tested-by: Marc Khouzam <marc.khouzam@ericsson.com>
This commit is contained in:
Alvaro Sanchez-Leon 2013-09-04 08:15:51 -04:00 committed by Marc Khouzam
parent 9d1233f05a
commit 2519bcb8cb
3 changed files with 46 additions and 2 deletions

View file

@ -10,6 +10,7 @@
* Ericsson AB - Modified for additional functionality
* Nokia - create and use backend service.
* Alvaro Sanchez-Leon (Ericsson AB) - Support for Step into selection (bug 244865)
* Alvaro Sanchez-Leon (Ericsson AB) - Bug 415362
*******************************************************************************/
package org.eclipse.cdt.dsf.gdb.service;
@ -48,6 +49,7 @@ import org.eclipse.cdt.dsf.mi.service.command.CommandFactory;
import org.eclipse.cdt.dsf.mi.service.command.events.MIBreakpointHitEvent;
import org.eclipse.cdt.dsf.mi.service.command.events.MIEvent;
import org.eclipse.cdt.dsf.mi.service.command.events.MIInferiorExitEvent;
import org.eclipse.cdt.dsf.mi.service.command.events.MIRunningEvent;
import org.eclipse.cdt.dsf.mi.service.command.events.MIStoppedEvent;
import org.eclipse.cdt.dsf.mi.service.command.events.MIThreadExitEvent;
import org.eclipse.cdt.dsf.mi.service.command.output.MIBreakInsertInfo;
@ -393,6 +395,34 @@ public class GDBRunControl extends MIRunControl {
}
}
/* (non-Javadoc)
* @see org.eclipse.cdt.dsf.mi.service.MIRunControl#eventDispatched(org.eclipse.cdt.dsf.mi.service.command.events.MIRunningEvent)
*/
@Override
@DsfServiceEventHandler
public void eventDispatched(final MIRunningEvent e) {
if (fDisableNextRunningEvent) {
// Leave the action to the super class
super.eventDispatched(e);
return;
}
if (fRunToLineActiveOperation == null && fStepInToSelectionActiveOperation == null) {
// No special case here, i.e. send notification
super.eventDispatched(e);
} else {
// Either RuntoLine or StepIntoSelection operations are active
if (fLatestEvent instanceof ISuspendedDMEvent) {
// Need to send out Running event notification only once per operation, then a stop event is expected at
// the end of it
super.eventDispatched(e);
}
}
// No event dispatched if RuntoLine or StepIntoSelection operations are active and a previous event is not a
// Suspended event, i.e. only one Running event distributed per operation
}
private boolean processRunToLineStoppedEvent(final MIStoppedEvent e) {
if (fRunToLineActiveOperation != null) {
int bpId = 0;

View file

@ -11,6 +11,7 @@
* Indel AG - [369622] fixed moveToLine using MinGW
* Marc Khouzam (Ericsson) - Support for operations on multiple execution contexts (bug 330974)
* Alvaro Sanchez-Leon (Ericsson AB) - Support for Step into selection (bug 244865)
* Alvaro Sanchez-Leon (Ericsson AB) - Bug 415362
*******************************************************************************/
package org.eclipse.cdt.dsf.gdb.service;
@ -1528,7 +1529,18 @@ public class GDBRunControl_7_0_NS extends AbstractDsfService implements IMIRunCo
return;
}
getSession().dispatchEvent(new ResumedEvent(e.getDMContext(), e), getProperties());
if (fRunToLineActiveOperation == null && fStepInToSelectionActiveOperation == null) {
// No special case here, i.e. send notification
getSession().dispatchEvent(new ResumedEvent(e.getDMContext(), e), getProperties());
} else {
// Either RunToLine or StepIntoSelection operations are active
MIThreadRunState threadState = fThreadRunStates.get(e.getDMContext());
if (threadState == null || threadState.fLatestEvent instanceof ISuspendedDMEvent) {
// Need to send out Running event notification, only once per operation, then a stop event is expected
// at the end of the operation
getSession().dispatchEvent(new ResumedEvent(e.getDMContext(), e), getProperties());
}
}
}
/**

View file

@ -12,6 +12,7 @@
* Indel AG - [369622] fixed moveToLine using MinGW
* Marc Khouzam (Ericsson) - Make each thread an IDisassemblyDMContext (bug 352748)
* Alvaro Sanchez-Leon (Ericsson AB) - Support for Step into selection (bug 244865)
* Alvaro Sanchez-Leon (Ericsson AB) - Bug 415362
*******************************************************************************/
package org.eclipse.cdt.dsf.mi.service;
@ -400,8 +401,9 @@ public class MIRunControl extends AbstractDsfService implements IMIRunControl, I
private IExecutionDMContext fStateChangeTriggeringContext;
/**
* Indicates that the next MIRunning event should be silenced.
* @since 4.3
*/
private boolean fDisableNextRunningEvent;
protected boolean fDisableNextRunningEvent;
/**
* Indicates that the next MISignal (MIStopped) event should be silenced.
*/