Skip to content

Commit f523213

Browse files
Fixed Trigger point disabled automatically (#667)
The trigger point is being disabled during debugging when a conditional breakpoint is hit. Fixes: #546
1 parent 3b04398 commit f523213

File tree

2 files changed

+41
-3
lines changed

2 files changed

+41
-3
lines changed

org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/TriggerPointBreakpointsTests.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,11 @@
1313
*******************************************************************************/
1414
package org.eclipse.jdt.debug.tests.breakpoints;
1515

16+
import org.eclipse.debug.core.ILaunch;
17+
import org.eclipse.debug.core.model.IBreakpoint;
1618
import org.eclipse.debug.core.model.IVariable;
1719
import org.eclipse.jdt.debug.core.IJavaBreakpoint;
20+
import org.eclipse.jdt.debug.core.IJavaDebugTarget;
1821
import org.eclipse.jdt.debug.core.IJavaLineBreakpoint;
1922
import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
2023
import org.eclipse.jdt.debug.core.IJavaStackFrame;
@@ -135,4 +138,33 @@ public void testTriggerPointBreakpointWithResumeAndConditionAsTrue() throws Exce
135138
removeAllBreakpoints();
136139
}
137140
}
141+
142+
// see bug : https://github.com/eclipse-jdt/eclipse.jdt.debug/issues/546
143+
public void testTriggerPointAutoEnableAfterConditionalBp() throws Exception {
144+
String typeName = "TriggerPoint_01";
145+
IJavaLineBreakpoint bp1 = createLineBreakpoint(20, typeName);
146+
IJavaLineBreakpoint bp2 = createLineBreakpoint(21, typeName);
147+
bp1.setTriggerPoint(true);
148+
bp2.setCondition("true");
149+
bp2.setConditionEnabled(true);
150+
bp2.setConditionSuspendOnTrue(true);
151+
IJavaThread thread = null;
152+
try {
153+
thread = launchToBreakpoint(typeName);
154+
IJavaStackFrame frame = (IJavaStackFrame) thread.getTopStackFrame();
155+
int lineNumber = frame.getLineNumber();
156+
assertEquals("Breakpoint should hit at triggeroint", 20, lineNumber);
157+
IJavaDebugTarget debugTarget = (IJavaDebugTarget) thread.getDebugTarget();
158+
ILaunch launch = debugTarget.getLaunch();
159+
thread.getLaunch().terminate();
160+
Thread.sleep(3000);
161+
IBreakpoint[] bps = getBreakpointManager().getBreakpoints();
162+
boolean enabledStatus = bps[0].isEnabled();
163+
assertTrue("Trigger point should be enabled after termination", enabledStatus);
164+
getLaunchManager().removeLaunch(launch);
165+
} finally {
166+
terminateAndRemove(thread);
167+
removeAllBreakpoints();
168+
}
169+
}
138170
}

org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1480,9 +1480,15 @@ private boolean handleSuspendForBreakpointInternal(JavaBreakpoint breakpoint) {
14801480
return true;
14811481
}
14821482
}
1483-
DebugPlugin.getDefault().getBreakpointManager().enableTriggerPoints(null, false);
1484-
// make a note that we auto-disabled the trigger point for this breakpoint.
1485-
// we re enable it at cleanup of JDITarget
1483+
try {
1484+
if (breakpoint.isTriggerPoint()) {
1485+
DebugPlugin.getDefault().getBreakpointManager().enableTriggerPoints(null, false);
1486+
// make a note that we auto-disabled the trigger point for this breakpoint.
1487+
// we re enable it at cleanup of JDITarget
1488+
}
1489+
} catch (CoreException e) {
1490+
logError(e);
1491+
}
14861492
}
14871493
}
14881494

0 commit comments

Comments
 (0)