protected void addTextMappingDead(long snap, Program p, ToyDBTraceBuilder tb) throws Throwable {
		addProgramTextBlock(p);
		try (Transaction tid = tb.startTransaction()) {
			TraceMemoryRegion textRegion = tb.trace.getMemoryManager()
					.addRegion("Processes[1].Memory[bin:.text]", Lifespan.nowOn(0),
						tb.range(0x55550000, 0x55550fff),
						Set.of(TraceMemoryFlag.READ, TraceMemoryFlag.EXECUTE));
			DebuggerStaticMappingUtils.addMapping(
				new DefaultTraceLocation(tb.trace, null, Lifespan.nowOn(snap),
					textRegion.getMinAddress(snap)),
				new ProgramLocation(p, addr(p, 0x00400000)), 0x1000, false);
		}
		waitForDomainObject(tb.trace);
	}
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