protected CompletableFuture<Void> toggleBreakpointLocAsync(TraceObjectBreakpointLocation loc,
			boolean enabled) {
		KeyPath path = loc.getObject().getCanonicalPath();
		MatchedMethod toggleBreak =
			matches.getBest(ToggleBreakMatcher.class, path, ActionName.TOGGLE,
				ToggleBreakMatcher.ALL);
		if (toggleBreak == null) {
			Msg.debug(this, "Falling back to toggle spec");
			return toggleBreakpointSpecAsync(loc.getSpecification(), enabled);
		}
		RemoteParameter paramLocation = toggleBreak.params.get("location");
		if (paramLocation != null) {
			return toggleBreak.method
					.invokeAsync(Map.ofEntries(
						Map.entry(paramLocation.name(), loc.getObject()),
						Map.entry(toggleBreak.params.get("enabled").name(), enabled)))
					.toCompletableFuture()
					.thenApply(__ -> null);
		}
		return toggleBreakpointSpecAsync(loc.getSpecification(), enabled);
	}
When checking for register validity, we consider it valid if it or any of its parents are
valid, or any alias thereof.
Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/service/tracermi/TraceRmiTarget.java