protected void waitForModuleMapping(TaskMonitor monitor, TraceRmiHandler connection,
			Trace trace) throws CancelledException, InterruptedException, ExecutionException,
			NoStaticMappingException {
		if (!requiresImage()) {
			return;
		}
		AutoMapSpec spec = getAutoMapSpec(trace);
		if (!spec.hasTask()) {
			return;
		}
		DebuggerStaticMappingService mappingService =
			tool.getService(DebuggerStaticMappingService.class);
		monitor.setMessage("Waiting for module mapping");
		try {
			listenForMapping(mappingService, connection, trace).get(getTimeoutMillis(),
				TimeUnit.MILLISECONDS);
		}
		catch (TimeoutException e) {
			monitor.setMessage(
				"Timed out waiting for module mapping. Invoking the mapper.");
			boolean mapped;
			try {
				mapped = invokeMapper(monitor, mappingService, connection, trace, spec);
			}
			catch (CancelledException ce) {
				throw new CancellationException(e.getMessage());
			}
			if (!mapped) {
				throw new NoStaticMappingException(
					"The resulting target process has no mapping to the static image.");
			}
		}
		monitor.increment();
	}
Obtain the launcher arguments

<p>
This should either call {@link #promptLauncherArgs(LaunchConfigurator, Throwable)} or
{@link #loadLastLauncherArgs(boolean)}. Note if choosing the latter, the user will not be
prompted to confirm.

@param prompt true to prompt the user, false to use saved arguments
@param configurator the rules for configuring the launcher
@param lastExc if retrying, the last exception to display as an error message
@return the chosen arguments, or null if the user cancels at the prompt
Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/gui/tracermi/launcher/AbstractTraceRmiLaunchOffer.java