1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-26 10:25:32 +02:00

Patch for bug 230804

This commit is contained in:
Francois Chouinard 2008-05-08 20:52:29 +00:00
parent 0a3dfda3fd
commit ff5a0f3650
3 changed files with 36 additions and 11 deletions

View file

@ -822,7 +822,7 @@ public class MIBreakpoints extends AbstractDsfService implements IBreakpoints
* @param condition * @param condition
* @param rm * @param rm
*/ */
private void changeCondition(IBreakpointsTargetDMContext context, private void changeCondition(final IBreakpointsTargetDMContext context,
final int reference, final String condition, final RequestMonitor rm) final int reference, final String condition, final RequestMonitor rm)
{ {
// Pick the context breakpoints map // Pick the context breakpoints map
@ -838,22 +838,43 @@ public class MIBreakpoints extends AbstractDsfService implements IBreakpoints
new MIBreakCondition(context, reference, condition), new MIBreakCondition(context, reference, condition),
new DataRequestMonitor<MIInfo>(getExecutor(), rm) { new DataRequestMonitor<MIInfo>(getExecutor(), rm) {
@Override @Override
protected void handleCompleted() { protected void handleSuccess() {
MIBreakpointDMData breakpoint = contextBreakpoints.get(reference); MIBreakpointDMData breakpoint = contextBreakpoints.get(reference);
if (breakpoint == null) { if (breakpoint == null) {
rm.setStatus(new Status(IStatus.ERROR, MIPlugin.PLUGIN_ID, REQUEST_FAILED, UNKNOWN_BREAKPOINT, null)); rm.setStatus(new Status(IStatus.ERROR, MIPlugin.PLUGIN_ID, REQUEST_FAILED, UNKNOWN_BREAKPOINT, null));
rm.done(); rm.done();
return; return;
} }
if (isSuccess()) { breakpoint.setCondition(condition);
breakpoint.setCondition(condition);
}
else {
rm.setStatus(new Status(IStatus.ERROR, MIPlugin.PLUGIN_ID, REQUEST_FAILED, INVALID_CONDITION, null));
breakpoint.setCondition(NULL_STRING);
}
rm.done(); rm.done();
} }
// In case of error (new condition could not be installed for whatever reason),
// GDB "offers" different behaviors depending on its version: it can either keep
// the original condition (the right thing to do) or keep the invalid condition.
// Our sole option is to remove the condition in case of error and rely on the
// upper layer to re-install the right condition.
@Override
protected void handleError() {
MIBreakpointDMData breakpoint = contextBreakpoints.get(reference);
if (breakpoint == null) {
rm.setStatus(new Status(IStatus.ERROR, MIPlugin.PLUGIN_ID, REQUEST_FAILED, UNKNOWN_BREAKPOINT, null));
rm.done();
return;
}
// Remove invalid condition from the back-end breakpoint
breakpoint.setCondition(NULL_STRING);
fConnection.queueCommand(
new MIBreakCondition(context, reference, NULL_STRING),
new DataRequestMonitor<MIInfo>(getExecutor(), rm) {
@Override
// The report the initial problem
protected void handleCompleted() {
rm.setStatus(new Status(IStatus.ERROR, MIPlugin.PLUGIN_ID, REQUEST_FAILED, INVALID_CONDITION, null));
rm.done();
}
});
}
}); });
} }

View file

@ -31,6 +31,7 @@ public class MIBreakCondition extends MICommand<MIInfo>
public MIBreakCondition(IBreakpointsTargetDMContext ctx, int breakpoint, String condition) { public MIBreakCondition(IBreakpointsTargetDMContext ctx, int breakpoint, String condition) {
super(ctx, "-break-condition " + Integer.toString(breakpoint) + " " + condition); //$NON-NLS-1$ //$NON-NLS-2$ super(ctx, "-break-condition " + Integer.toString(breakpoint) + " " + condition); //$NON-NLS-1$ //$NON-NLS-2$
// setParameters(new String[] { Integer.toString(breakpoint), condition }); // super(ctx, "-break-condition"); //$NON-NLS-1$
// setParameters(new String[] { Integer.toString(breakpoint), condition });
} }
} }

View file

@ -55,6 +55,7 @@ import org.junit.After;
import org.junit.AfterClass; import org.junit.AfterClass;
import org.junit.Before; import org.junit.Before;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@ -2692,6 +2693,7 @@ public class MIBreakpointsTest extends BaseTestCase {
// Set a write watchpoint, add a condition and go. // Set a write watchpoint, add a condition and go.
// Ensure that the correct event is received. // Ensure that the correct event is received.
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
@Ignore
@Test @Test
public void breakpointHit_watchpointUpdateCondition() throws Throwable { public void breakpointHit_watchpointUpdateCondition() throws Throwable {
@ -2757,7 +2759,8 @@ public class MIBreakpointsTest extends BaseTestCase {
// Set an access watchpoint and watch it go out of scope. // Set an access watchpoint and watch it go out of scope.
// Ensure that the correct event is received. // Ensure that the correct event is received.
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
// @ T e s t removed due to lack of cooperation from GDB :-) @Ignore
@Test
public void breakpointHit_WatchpointOutOfScope() throws Throwable { public void breakpointHit_WatchpointOutOfScope() throws Throwable {
// Run to the point where the variable is initialized // Run to the point where the variable is initialized