@Test
	public void testPlaceStepThenDeleteBreakpointTraceOnly() throws Throwable {
		createTarget1();
		Trace trace = getTrace(target1);
		traceManager.openTrace(trace);

		MR text = addTargetTextRegion(target1);
		addTargetSoftwareBreakpoint(target1, text);
		waitOn(breakpointService.changesSettled());

		assertLogicalBreakpointForLoneSoftwareBreakpoint(trace, 1);

		LogicalBreakpoint lb = Unique.assertOne(breakpointService.getAllBreakpoints());

		// Simulate a step, which should also cause snap advance in target
		simulateTargetStep(target1);

		CompletableFuture<Void> delete = lb.delete();
		handleDeleteBreakpointInvocation(target1, Unique.assertOne(lb.getTraceBreakpoints(trace)));
		waitOn(delete);
		waitForDomainObject(trace);
		waitOn(breakpointService.changesSettled());

		assertEquals(0, breakpointService.getAllBreakpoints().size());
	}
NB. The target could still be mid transaction. If we open this transaction too soon, then
the breakpoint gets aborted as well.
Ghidra/Test/DebuggerIntegrationTest/src/test/java/ghidra/app/plugin/core/debug/service/breakpoint/AbstractDebuggerLogicalBreakpointServiceTest.java