mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Patch for bug 230804
This commit is contained in:
parent
0a3dfda3fd
commit
ff5a0f3650
3 changed files with 36 additions and 11 deletions
|
@ -822,7 +822,7 @@ public class MIBreakpoints extends AbstractDsfService implements IBreakpoints
|
|||
* @param condition
|
||||
* @param rm
|
||||
*/
|
||||
private void changeCondition(IBreakpointsTargetDMContext context,
|
||||
private void changeCondition(final IBreakpointsTargetDMContext context,
|
||||
final int reference, final String condition, final RequestMonitor rm)
|
||||
{
|
||||
// Pick the context breakpoints map
|
||||
|
@ -838,22 +838,43 @@ public class MIBreakpoints extends AbstractDsfService implements IBreakpoints
|
|||
new MIBreakCondition(context, reference, condition),
|
||||
new DataRequestMonitor<MIInfo>(getExecutor(), rm) {
|
||||
@Override
|
||||
protected void handleCompleted() {
|
||||
protected void handleSuccess() {
|
||||
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;
|
||||
}
|
||||
if (isSuccess()) {
|
||||
breakpoint.setCondition(condition);
|
||||
}
|
||||
else {
|
||||
rm.setStatus(new Status(IStatus.ERROR, MIPlugin.PLUGIN_ID, REQUEST_FAILED, INVALID_CONDITION, null));
|
||||
breakpoint.setCondition(NULL_STRING);
|
||||
}
|
||||
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();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@ public class MIBreakCondition extends MICommand<MIInfo>
|
|||
|
||||
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"); //$NON-NLS-1$
|
||||
// setParameters(new String[] { Integer.toString(breakpoint), condition });
|
||||
}
|
||||
}
|
||||
|
|
|
@ -55,6 +55,7 @@ import org.junit.After;
|
|||
import org.junit.AfterClass;
|
||||
import org.junit.Before;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
|
@ -2692,6 +2693,7 @@ public class MIBreakpointsTest extends BaseTestCase {
|
|||
// Set a write watchpoint, add a condition and go.
|
||||
// Ensure that the correct event is received.
|
||||
// ------------------------------------------------------------------------
|
||||
@Ignore
|
||||
@Test
|
||||
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.
|
||||
// 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 {
|
||||
|
||||
// Run to the point where the variable is initialized
|
||||
|
|
Loading…
Add table
Reference in a new issue