@Test
	public void testToggleBreakpointDecompilerTwoAddresses() throws Throwable {
		prepareDecompiler();
		DecompileResults results = new MockDecompileResults(function) {
			{
				root(function(token("token1_with_addr", entry),
					token("token2_with_addr", entry.add(2))));
			}
		};
		runSwing(() -> decompilerProvider.getController().setDecompileData(mockData(results)));

		waitOn(breakpointService.placeBreakpointAt(program, entry, 1,
			Set.of(TraceBreakpointKind.SW_EXECUTE), ""));
		waitOn(breakpointService.placeBreakpointAt(program, entry.add(2), 1,
			Set.of(TraceBreakpointKind.SW_EXECUTE), ""));
		waitForPass(() -> {
			assertEquals(2, breakpointService.getAllBreakpoints().size());
		});

		performEnabledAction(decompilerProvider, breakpointMarkerPlugin.actionToggleBreakpoint,
			true);
		waitForPass(() -> {
			Set<LogicalBreakpoint> all = breakpointService.getAllBreakpoints();
			assertEquals(2, all.size());
			for (LogicalBreakpoint lb : all) {
				assertEquals(State.INEFFECTIVE_DISABLED, lb.computeState());
			}
		});
	}
TODO: Test with a second trace? ATM, the program state is auto-synced with single trace,
so might be difficult to assess more complex state changes.
Ghidra/Test/DebuggerIntegrationTest/src/test/java/ghidra/app/plugin/core/debug/gui/breakpoint/AbstractDebuggerBreakpointMarkerPluginTest.java