mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-26 18:35:32 +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 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();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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$
|
||||||
|
// super(ctx, "-break-condition"); //$NON-NLS-1$
|
||||||
// setParameters(new String[] { Integer.toString(breakpoint), condition });
|
// setParameters(new String[] { Integer.toString(breakpoint), condition });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Reference in a new issue