@Test
	public void testBreakOnAccess() throws Exception {
		try (JshellAndConnection conn = startAndConnectJshell()) {
			start(conn, "HelloWorld.class");

			RemoteMethod stepInto = conn.getMethod("step_into");
			RemoteMethod resume = conn.getMethod("resume_thread");
			RemoteMethod refreshFields = conn.getMethod("refresh_canonical_fields");
			RemoteMethod breakOnAccess = conn.getMethod("break_access");
			try (ManagedDomainObject mdo = openDomainObject("/New Traces/HelloWorld.class")) {
				tb = new ToyDBTraceBuilder((Trace) mdo.get());
				txPut(conn, "Threads");
				TraceObject thread = waitForObject("VMs[].Threads[main]");

				stepInto.invoke(Map.of("thread", thread));
				waitTxDone();

				TraceObject fieldCont = waitForObject("VMs[].Classes[java.lang.Thread].Fields");
				refreshFields.invoke(Map.of("container", fieldCont));
				waitTxDone();
				List<TraceObjectValue> fields =
					waitForValues("VMs[].Classes[java.lang.Thread].Fields[NEW_THREAD_BINDINGS]");
				for (TraceObjectValue f : fields) {
					breakOnAccess.invoke(Map.of("field", f.getChild()));
					waitTxDone();
				}

				resume.invoke(Map.of("thread", thread));
				waitTxDone();

				List<TraceObjectValue> brkVals = waitForValues("VMs[].Breakpoints[]");
				assertEquals(1, brkVals.size());
				//assertTrue(eventVals.get(0).getEntryKey().contains("method entry request"));

				txPut(conn, "Frames");
				List<TraceObjectValue> pcs = waitForValues("VMs[].Threads[main].Stack[0]._display");
				assertTrue(pcs.get(0).getValue().toString().contains("<init>"));
			}
		}
	}
NOTE: If using break_load_container, you'd need to follow with set_source_filter
using "HelloWorld*". I still haven't looked far enough to figure out what the exact
match should be. (It's not "HelloWorld", but maybe it's "HelloWorld.class". I've just
switched over to break_enter_container, instead.
Ghidra/Test/DebuggerIntegrationTest/src/test.slow/java/agent/java/rmi/JavaMethodsTest.java