eclipse.platform icon indicating copy to clipboard operation
eclipse.platform copied to clipboard

ResourceException Marker id not found when calling BreakpointManager.removeBreakpoints()

Open trancexpress opened this issue 2 months ago • 1 comments

See: https://bugs.eclipse.org/bugs/show_bug.cgi?id=564872

During one of our tests we observed the following exception:

org.eclipse.core.internal.resources.ResourceException: Marker id 1332 not found.
	at org.eclipse.core.internal.resources.Marker.checkInfo(Marker.java:63)
	at org.eclipse.core.internal.resources.Marker.setAttribute(Marker.java:260)
	at org.eclipse.jdt.internal.debug.ui.JavaDebugOptionsManager$2.run(JavaDebugOptionsManager.java:894)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2292)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2317)
	at org.eclipse.jdt.internal.debug.ui.JavaDebugOptionsManager.updateBreakpointMessages(JavaDebugOptionsManager.java:906)
	at org.eclipse.jdt.internal.debug.ui.JavaDebugOptionsManager.breakpointsChanged(JavaDebugOptionsManager.java:965)
	at org.eclipse.debug.internal.core.BreakpointManager$BreakpointsNotifier.run(BreakpointManager.java:1104)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
	at org.eclipse.debug.internal.core.BreakpointManager$BreakpointsNotifier.notify(BreakpointManager.java:1124)
	at org.eclipse.debug.internal.core.BreakpointManager.fireUpdate(BreakpointManager.java:975)
	at org.eclipse.debug.internal.core.BreakpointManager.access$4(BreakpointManager.java:962)
	at org.eclipse.debug.internal.core.BreakpointManager$BreakpointManagerVisitor.update(BreakpointManager.java:788)
	at org.eclipse.debug.internal.core.BreakpointManager.resourceChanged(BreakpointManager.java:699)
	at org.eclipse.core.internal.events.NotificationManager$1.run(NotificationManager.java:305)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
	at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:295)
	at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:158)
	at org.eclipse.core.internal.resources.Workspace.broadcastBuildEvent(Workspace.java:366)
	at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:157)
	at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:244)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
!SUBENTRY 1 org.eclipse.core.resources 4 376 2020-06-30 21:21:07.013

Upon investigation, the exception coincides with a call to org.eclipse.debug.internal.core.BreakpointManager.removeBreakpoints(IBreakpoint[], boolean) from our test. The code in BreakpointManager.removeBreakpoints() deletes a breakpoint marker without specifying a rule, and so can cause race condition (and e.g. cause the error stack trace above).

As in bug 540132 (https://git.eclipse.org/c/jdt/eclipse.jdt.debug.git/commit/?id=897972b60a60c5bd9d0b8138d5be9b07addfcaf5), the breakpoints operation should specify a workspace modification rule if there is no matching outer rule.

To reproduce:

  1. Debug Eclipse.
  2. In the debuggee Eclipse, set a breakpoint at the System.out.println() in this snippet:
package test;

public class TestClass {

	public static void main1(String[] args) {
		System.out.println("hello world");
	}

}
  1. Set a breakpoint at org.eclipse.jdt.internal.debug.ui.JavaDebugOptionsManager.updateBreakpointMessages(IBreakpoint[]), at:
marker.setAttribute(IMarker.MESSAGE, type + info);
  1. Set a breakpoint at the start of: org.eclipse.debug.internal.core.BreakpointManager.removeBreakpoints(IBreakpoint[], boolean)
  2. Change the main method name to main1 (simply by typing, no need for refactor ranem) and save. This hits the breakpoint at JavaDebugOptionsManager.updateBreakpointMessages.
  3. Remove all breakpoints with the respective Breakpoints view action, this hits the breakpoint at BreakpointManager.removeBreakpoint().
  4. Resume first the thread in BreakpointManager, then the thread in JavaDebugOptionsManager.

trancexpress avatar Oct 28 '25 12:10 trancexpress

As in bug 540132 (https://git.eclipse.org/c/jdt/eclipse.jdt.debug.git/commit/?id=897972b60a60c5bd9d0b8138d5be9b07addfcaf5),

The right link to commit is https://github.com/eclipse-jdt/eclipse.jdt.debug/commit/897972b60a60c5bd9d0b8138d5be9b07addfcaf5

iloveeclipse avatar Oct 28 '25 12:10 iloveeclipse