/* (non-Javadoc) * @see org.eclipse.jdt.launching.IVMInstall#getVMRunner(java.lang.String) */ public IVMRunner getVMRunner(String mode) { if (ILaunchManager.RUN_MODE.equals(mode)) { return new StandardVMRunner(this); } else if (ILaunchManager.DEBUG_MODE.equals(mode)) { return new StandardVMDebugger(this); } return null; }
public LSLTestInteractor( String launchMode, TestManager manager, String testDescriptor, InputStream in, OutputStream out) { reader = new BufferedReader(new InputStreamReader(in)); writer = new PrintStream(out); this.testDescriptor = testDescriptor; this.manager = manager; this.debugMode = ILaunchManager.DEBUG_MODE.equals(launchMode); }
/** @return <code>true</code> iff the runtime VM of this test session is still alive */ public boolean isKeptAlive() { if (fTestRunnerClient != null && fLaunch != null && fTestRunnerClient.isRunning() && ILaunchManager.DEBUG_MODE.equals(fLaunch.getLaunchMode())) { ILaunchConfiguration config = fLaunch.getLaunchConfiguration(); try { return config != null && config.getAttribute(DLTKTestingConstants.ATTR_KEEPRUNNING, false); } catch (CoreException e) { return false; } } else { return false; } }
/** * Helper function to add system properties that tell Grails to debug run-app or test-app in as a * forked process in debugging mode. * * <p>These properties are added only if applicable. I.e. recent enough graisl version and this is * a debug-mode launch. * * <p>In the process of adding the arguments, we will pick a free port. * * @return Chosen debug port or -1 if not launching in forked debug mode. */ private int addForkedModeDebuggingArgs(ILaunchConfiguration conf, String mode, List<String> args) throws IOException { // TODO Auto-generated method stub if (!ILaunchManager.DEBUG_MODE.equals(mode)) { return -1; } GrailsVersion version = GrailsLaunchArgumentUtils.getGrailsVersion(conf); if (GrailsVersion.V_2_3_.compareTo(version) > 0) { return -1; // Disable this feature for pre Grails 2.3. } int debugPort = portFinder.findUniqueFreePort(); args.add("-Dgrails.project.fork.run.debug=true"); args.add("-Dgrails.project.fork.test.debug=true"); String debugArgs = "-Xrunjdwp:transport=dt_socket,server=n,suspend=y,address=" + debugPort; args.add("-Dgrails.project.fork.run.debugArgs=" + debugArgs); args.add("-Dgrails.project.fork.test.debugArgs=" + debugArgs); return debugPort; }
@SuppressWarnings("unchecked") public void launch( ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor) throws CoreException { try { GrailsVersion version = GrailsLaunchArgumentUtils.getGrailsVersion(configuration); IProgressMonitor subMonitor = new SubProgressMonitor(monitor, 5); checkCancelled(subMonitor); subMonitor.beginTask("Starting Grails", 5); subMonitor.worked(1); checkCancelled(subMonitor); subMonitor.subTask("Configuring launch parameters..."); // FIXKDV FIXADE Copies of this code exist in // GrailsLaunchArgumentUtils.prepareClasspath() // and GrailsLaunchConfigurationDelegate.launch() // consider refactoring to combine IVMRunner runner; IVMInstall vm = verifyVMInstall(configuration); if (GrailsVersion.V_2_3_.compareTo(version) <= 0) { // We'll be debugging the forked process, not the run-app command. runner = vm.getVMRunner(ILaunchManager.RUN_MODE); } else { runner = vm.getVMRunner(mode); } if (runner == null) { runner = vm.getVMRunner(ILaunchManager.RUN_MODE); } String projectName = configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, ""); IProject project = null; if (!"".equals(projectName)) { project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); } String grailsHome = GrailsLaunchArgumentUtils.getGrailsHome(configuration); String baseDir = configuration.getAttribute(GrailsLaunchArgumentUtils.PROJECT_DIR_LAUNCH_ATTR, ""); if (baseDir.equals("")) { baseDir = ResourcesPlugin.getWorkspace().getRoot().getLocation().toString(); } String script = getScript(configuration); File workingDir = verifyWorkingDirectory(configuration); String workingDirName = null; if (workingDir != null) { workingDirName = workingDir.getAbsolutePath(); } else { workingDirName = baseDir; } List<String> programArguments = new ArrayList<String>(); programArguments.add("--conf"); programArguments.add(grailsHome + "conf" + File.separatorChar + "groovy-starter.conf"); programArguments.add("--main"); programArguments.add("org.codehaus.groovy.grails.cli.GrailsScriptRunner"); StringBuilder grailsCommand = new StringBuilder(); String grailsWorkDir = configuration.getAttribute(GrailsLaunchArgumentUtils.GRAILS_WORK_DIR_LAUNCH_ATTR, ""); if (!grailsWorkDir.equals("")) { grailsCommand.append("-Dgrails.work.dir=" + grailsWorkDir + " "); } grailsCommand.append(script + " "); programArguments.add(grailsCommand.toString().trim()); List<String> vmArgs = new ArrayList<String>(); // vmArgs.add("-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8123"); // add manual configured vm options to the argument list String existingVmArgs = getVMArguments(configuration); boolean launchConfHasVMArgs = false; if (existingVmArgs != null && existingVmArgs.length() > 0) { launchConfHasVMArgs = true; StringTokenizer additionalArguments = new StringTokenizer(existingVmArgs, " "); while (additionalArguments.hasMoreTokens()) { vmArgs.add(additionalArguments.nextToken()); } } Map<String, String> systemProps = GrailsCoreActivator.getDefault().getLaunchSystemProperties(); GrailsLaunchArgumentUtils.setMaybe(systemProps, "base.dir", baseDir); GrailsLaunchArgumentUtils.setMaybe(systemProps, "grails.home", grailsHome); for (Map.Entry<String, String> prop : systemProps.entrySet()) { vmArgs.add("-D" + prop.getKey() + "=" + prop.getValue()); } int forkedProcessDebugPort = addForkedModeDebuggingArgs(configuration, mode, vmArgs); ArrayList<Integer> killPorts = addKillPortArg(project, vmArgs); if (!launchConfHasVMArgs) { // If the user added their own vmargs to the launch config then the 'default' from global // prefs should // not be used. GrailsLaunchArgumentUtils.addUserDefinedJVMArgs(vmArgs); } // Grails uses some default memory settings that we want to use as well if no others have been // configured vmArgs = GrailsLaunchArgumentUtils.addMemorySettings(vmArgs); vmArgs = GrailsLaunchArgumentUtils.addSpringLoadedArgs(configuration, vmArgs); String[] envp = getEnvironment(configuration); Map<String, String> extra = new HashMap<String, String>(); extra.put("JAVA_HOME", vm.getInstallLocation().getAbsolutePath()); extra.put( "GROOVY_PAGE_ADD_LINE_NUMBERS", "true"); // Enables line number info for GSP debugging envp = GrailsLaunchArgumentUtils.addToEnvMaybe(envp, extra); Map<String, Object> vmAttributesMap = getVMSpecificAttributesMap(configuration); String[] classpath = getClasspath(configuration); String mainTypeName = verifyMainTypeName(configuration); VMRunnerConfiguration runConfiguration = new VMRunnerConfiguration(mainTypeName, classpath); runConfiguration.setProgramArguments( programArguments.toArray(new String[programArguments.size()])); runConfiguration.setVMArguments(vmArgs.toArray(new String[vmArgs.size()])); runConfiguration.setWorkingDirectory(workingDirName); runConfiguration.setEnvironment(envp); runConfiguration.setVMSpecificAttributesMap(vmAttributesMap); String[] bootpath = getBootpath(configuration); if (bootpath != null && bootpath.length > 0) { runConfiguration.setBootClassPath(bootpath); } subMonitor.worked(1); checkCancelled(subMonitor); subMonitor.subTask("Setting up source locator..."); setDefaultSourceLocator(launch, configuration); subMonitor.worked(1); checkCancelled(subMonitor); subMonitor.worked(1); checkCancelled(subMonitor); subMonitor.subTask("Launching Grails..."); if (ILaunchManager.DEBUG_MODE.equals(mode)) { launchRemote(forkedProcessDebugPort, configuration, mode, launch, subMonitor); } GrailsCoreActivator.getDefault().notifyCommandStart(project); runner.run(runConfiguration, launch, monitor); AbstractLaunchProcessListener listener = getLaunchListener(configuration); if (listener != null) { listener.init(launch.getProcesses()[0]); } DebugPlugin.getDefault() .addDebugEventListener( new GrailsProcessListener(launch.getProcesses(), project, killPorts)); subMonitor.worked(1); } catch (Exception e) { GrailsCoreActivator.log(e); } }
/* * (non-Javadoc) * * @seeorg.eclipse.php.internal.debug.core.debugger.parameters. * IDebugParametersInitializer * #generateQueryParameters(org.eclipse.debug.core.ILaunch) */ public Hashtable<String, String> getDebugParameters(ILaunch launch) { Hashtable<String, String> parameters = new Hashtable<String, String>(); ILaunchConfiguration launchConfiguration = launch.getLaunchConfiguration(); parameters.put(START_DEBUG, "1"); // $NON-NLS-1$ String port = launch.getAttribute(IDebugParametersKeys.PORT); if (port != null) { parameters.put(DEBUG_PORT, port); } else { PHPDebugPlugin.logErrorMessage( "A port was not defined for the DefaultDebugParametersInitializer."); //$NON-NLS-1$ } if (getBooleanValue(launch.getAttribute(IDebugParametersKeys.PASSIVE_DEBUG))) { parameters.put(DEBUG_PASSIVE, "1"); // $NON-NLS-1$ } parameters.put(SEND_SESS_END, "1"); // $NON-NLS-1$ if (getBooleanValue(launch.getAttribute(IDebugParametersKeys.WEB_SERVER_DEBUGGER))) { String debugHosts = PHPDebugPlugin.getDebugHosts(); // Set up custom server debug hosts if any if (launchConfiguration != null) { try { Server server = ServersManager.getServer( launchConfiguration.getAttribute(Server.NAME, "")); // $NON-NLS-1$ String customHosts = ZendDebuggerSettingsUtil.getDebugHosts(server.getUniqueId()); if (!customHosts.isEmpty()) debugHosts = customHosts; } catch (CoreException ce) { Logger.logException(ce); } } parameters.put(DEBUG_HOST, debugHosts); parameters.put(DEBUG_NO_CACHE, Long.toString(System.currentTimeMillis())); } if (ILaunchManager.DEBUG_MODE.equals(launch.getLaunchMode()) && getBooleanValue(launch.getAttribute(IDebugParametersKeys.FIRST_LINE_BREAKPOINT))) { parameters.put(DEBUG_STOP, "1"); // $NON-NLS-1$ } String url = launch.getAttribute(IDebugParametersKeys.ORIGINAL_URL); if (url != null) { parameters.put(ORIGINAL_URL, url); } if (launchConfiguration != null) { try { String sessionSetting = launchConfiguration.getAttribute( IPHPDebugConstants.DEBUGGING_PAGES, IPHPDebugConstants.DEBUGGING_ALL_PAGES); if (IPHPDebugConstants.DEBUGGING_ALL_PAGES.equals(sessionSetting)) { parameters.put(DEBUG_ALL_PAGES, "1"); // $NON-NLS-1$ } else if (IPHPDebugConstants.DEBUGGING_FIRST_PAGE.equals(sessionSetting)) { parameters.put(DEBUG_FIRST_PAGE, "1"); // $NON-NLS-1$ } else if (IPHPDebugConstants.DEBUGGING_START_FROM.equals(sessionSetting)) { parameters.put( DEBUG_START_URL, launchConfiguration.getAttribute( IPHPDebugConstants.DEBUGGING_START_FROM_URL, "")); // $NON-NLS-1$ if (launchConfiguration.getAttribute( IPHPDebugConstants.DEBUGGING_SHOULD_CONTINUE, false)) { parameters.put(DEBUG_CONTINUE, "1"); // $NON-NLS-1$ } } } catch (CoreException ce) { Logger.logException(ce); } } String sessID = launch.getAttribute(IDebugParametersKeys.SESSION_ID); if (sessID != null) { parameters.put(DEBUG_SESSION_ID, sessID); } return parameters; }