protected CompletableFuture<Void> deleteBreakpointLocAsync(TraceObjectBreakpointLocation loc) {
		KeyPath path = loc.getObject().getCanonicalPath();
		MatchedMethod delBreak =
			matches.getBest(DelBreakMatcher.class, path, ActionName.DELETE, DelBreakMatcher.ALL);
		if (delBreak == null) {
			Msg.debug(this, "Falling back to delete spec");
			return deleteBreakpointSpecAsync(loc.getSpecification());
		}
		RemoteParameter paramLocation = delBreak.params.get("location");
		if (paramLocation != null) {
			return delBreak.method.invokeAsync(Map.of(paramLocation.name(), loc.getObject()))
					.toCompletableFuture()
					.thenApply(__ -> null);
		}
		return deleteBreakpointSpecAsync(loc.getSpecification());
	}
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