public void do2Steps(JshellAndConnection conn, RemoteMethod step, TraceObject thread) {
		step.invoke(Map.of("thread", thread));
		waitTxDone();
		txPut(conn, "Frames");
		waitForLocation("HelloWorld", "main", 3);

		step.invoke(Map.of("thread", thread));
		waitTxDone();
		txPut(conn, "Frames");
		waitForLocation("HelloWorld", "main", 5);
	}
Because we control the target artifact, we know the steps precisely. NOTE: This must be the
same at least for step_into and step_over, otherwise, we can't know for sure step_over
actually behaves any differently than step_into. By matching with step_into, we can assure
ourselves that step_over actually encountered an invoke* bytecode instruction, because if it
didn't then step_into ought to fail.
Ghidra/Test/DebuggerIntegrationTest/src/test.slow/java/agent/java/rmi/JavaMethodsTest.java