@TraceMethod(action = "read_mem", display = "Read Memory")
	public long read_mem(
			@Param(
				schema = "VirtualMachine",
				description = "VirtualMachine",
				display = "VirtualMachine",
				name = "vm") RmiTraceObject obj,
			@Param(
				description = "Range",
				display = "Range",
				name = "range") AddressRange range) {
		VirtualMachine vm = connector.getJdi().getCurrentVM();
		MemoryMapper mapper = cmds.state.trace.memoryMapper;
		Address start = mapper.mapBack(range.getMinAddress());
		try (RmiTransaction tx = cmds.state.trace.openTx("ReadMemory")) {
			cmds.putMem(start, range.getLength(), true);
			cmds.putMemState(start, range.getLength(), MemoryState.MS_KNOWN, true);
		}
		catch (Exception e) {
			cmds.putMemState(start, range.getLength(), MemoryState.MS_ERROR, true);
		}
		return range.getLength();
	}
NB: For the VirtualMachine, the step methods add requests for break-on-step for all threads.
These requests will remain pending until the VM is resumed.
Ghidra/Debug/Debugger-jpda/src/main/java/ghidra/dbg/jdi/rmi/jpda/JdiMethods.java