protected Set<TraceBreakpointKind> computeSupportedBreakpointKinds() {
		Set<TraceBreakpointKind> result = new HashSet<>();
		RemoteMethodRegistry methods = connection.getMethods();
		if (!methods.getByAction(ActionName.BREAK_HW_EXECUTE).isEmpty()) {
			result.add(TraceBreakpointKind.HW_EXECUTE);
		}
		if (!methods.getByAction(ActionName.BREAK_SW_EXECUTE).isEmpty()) {
			result.add(TraceBreakpointKind.SW_EXECUTE);
		}
		if (!methods.getByAction(ActionName.BREAK_READ).isEmpty()) {
			result.add(TraceBreakpointKind.READ);
		}
		if (!methods.getByAction(ActionName.BREAK_WRITE).isEmpty()) {
			result.add(TraceBreakpointKind.WRITE);
		}
		if (!methods.getByAction(ActionName.BREAK_ACCESS).isEmpty()) {
			result.add(TraceBreakpointKind.READ);
			result.add(TraceBreakpointKind.WRITE);
		}
		return Set.copyOf(result);
	}
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