@Test
	public void testWriteTargetSubRegister() throws Throwable {
		createAndOpenTrace();
		addTarget();

		TraceThread thread =
			tb.obj("Processes[1].Threads[1]").queryInterface(TraceObjectThread.class);
		activateTrace(); // platform
		traceManager.activateThread(thread);
		waitForSwing();
		controlService.setCurrentMode(tb.trace, ControlMode.RW_TARGET);

		StateEditor editor = createStateEditor();
		assertTrue(editor.isRegisterEditable(r0));
		CompletableFuture<Void> future = editor.setRegister(rv1234);
		handleWriteRegInvocation(
			tb.obj("Processes[1].Threads[1].Stack[0]").queryInterface(TraceObjectStackFrame.class),
			"r0", 1234);
		waitOn(future);

		assertTrue(editor.isRegisterEditable(r0h));
		CompletableFuture<Void> future2 = editor.setRegister(rvHigh1234);
		handleWriteRegInvocation(
			tb.obj("Processes[1].Threads[1].Stack[0]").queryInterface(TraceObjectStackFrame.class),
			"r0h", 1234);
		waitOn(future2);
	}
TODO: It'd be nice if this worked, since memory edits don't really require a thread
context. That would require some changes in the TraceSchedule and its execution. IINM,
each step currently requires a thread. We'd have to relax that for patch steps, and it'd
only work if they don't refer to any register.
Ghidra/Test/DebuggerIntegrationTest/src/test/java/ghidra/app/plugin/core/debug/service/control/DebuggerControlServiceTest.java