mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
[232311] - [launch] Progress monitor is ignored in the launch
This commit is contained in:
parent
d2b6ebba2f
commit
5d4aede23e
4 changed files with 25 additions and 10 deletions
|
@ -17,6 +17,7 @@ import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
|
|||
import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLookupDirector;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.IStatus;
|
||||
import org.eclipse.core.runtime.Status;
|
||||
import org.eclipse.dd.dsf.concurrent.DataRequestMonitor;
|
||||
|
@ -487,8 +488,8 @@ public class FinalLaunchSequence extends Sequence {
|
|||
|
||||
DsfServicesTracker fTracker;
|
||||
|
||||
public FinalLaunchSequence(DsfExecutor executor, GdbLaunch launch, SessionType sessionType, boolean attach) {
|
||||
super(executor);
|
||||
public FinalLaunchSequence(DsfExecutor executor, GdbLaunch launch, SessionType sessionType, boolean attach, IProgressMonitor pm) {
|
||||
super(executor, pm, "Configuring GDB", "Aborting configuring GDB", null);
|
||||
fLaunch = launch;
|
||||
fSessionType = sessionType;
|
||||
fAttach = attach;
|
||||
|
|
|
@ -28,6 +28,7 @@ import org.eclipse.core.runtime.IStatus;
|
|||
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
import org.eclipse.core.runtime.Status;
|
||||
import org.eclipse.core.runtime.SubProgressMonitor;
|
||||
import org.eclipse.dd.dsf.concurrent.DsfExecutor;
|
||||
import org.eclipse.dd.dsf.concurrent.Sequence;
|
||||
import org.eclipse.dd.dsf.concurrent.ThreadSafe;
|
||||
|
@ -134,8 +135,10 @@ public class GdbLaunchDelegate extends LaunchConfigurationDelegate
|
|||
launch.setServiceFactory(newServiceFactory(gdbVersion));
|
||||
|
||||
// Create and invoke the launch sequence to create the debug control and services
|
||||
IProgressMonitor subMon1 = new SubProgressMonitor(monitor, 4, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK);
|
||||
final ServicesLaunchSequence servicesLaunchSequence =
|
||||
new ServicesLaunchSequence(launch.getSession(), launch);
|
||||
new ServicesLaunchSequence(launch.getSession(), launch, subMon1);
|
||||
|
||||
launch.getSession().getExecutor().execute(servicesLaunchSequence);
|
||||
try {
|
||||
servicesLaunchSequence.get();
|
||||
|
@ -145,6 +148,9 @@ public class GdbLaunchDelegate extends LaunchConfigurationDelegate
|
|||
throw new DebugException(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, DebugException.REQUEST_FAILED, "Error in services launch sequence", e1.getCause())); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
if (monitor.isCanceled())
|
||||
return;
|
||||
|
||||
// The initializeControl method should be called after the ICommandControlService
|
||||
// be initialized in the ServicesLaunchSequence above. This is because it is that
|
||||
// service that will trigger the launch cleanup (if we need it during this launch)
|
||||
|
@ -155,9 +161,13 @@ public class GdbLaunchDelegate extends LaunchConfigurationDelegate
|
|||
launch.addCLIProcess("gdb"); //$NON-NLS-1$
|
||||
launch.addInferiorProcess(exePath.lastSegment());
|
||||
|
||||
monitor.worked(1);
|
||||
|
||||
// Create and invoke the final launch sequence to setup GDB
|
||||
IProgressMonitor subMon2 = new SubProgressMonitor(monitor, 4, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK);
|
||||
final Sequence finalLaunchSequence =
|
||||
getFinalLaunchSequence(launch.getSession().getExecutor(), launch, sessionType, attach);
|
||||
getFinalLaunchSequence(launch.getSession().getExecutor(), launch, sessionType, attach, subMon2);
|
||||
|
||||
launch.getSession().getExecutor().execute(finalLaunchSequence);
|
||||
try {
|
||||
finalLaunchSequence.get();
|
||||
|
@ -172,8 +182,8 @@ public class GdbLaunchDelegate extends LaunchConfigurationDelegate
|
|||
* This method can be overridden by subclasses to allow to change the final launch sequence without
|
||||
* having to change the entire GdbLaunchDelegate
|
||||
*/
|
||||
protected Sequence getFinalLaunchSequence(DsfExecutor executor, GdbLaunch launch, SessionType type, boolean attach) {
|
||||
return new FinalLaunchSequence(executor, launch, type, attach);
|
||||
protected Sequence getFinalLaunchSequence(DsfExecutor executor, GdbLaunch launch, SessionType type, boolean attach, IProgressMonitor pm) {
|
||||
return new FinalLaunchSequence(executor, launch, type, attach, pm);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
package org.eclipse.dd.gdb.internal.provisional.launching;
|
||||
|
||||
import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLookupDirector;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.dd.dsf.concurrent.RequestMonitor;
|
||||
import org.eclipse.dd.dsf.concurrent.Sequence;
|
||||
import org.eclipse.dd.dsf.debug.service.IBreakpoints;
|
||||
|
@ -118,8 +119,8 @@ public class ServicesLaunchSequence extends Sequence {
|
|||
IMIProcesses fProcService;
|
||||
CSourceLookup fSourceLookup;
|
||||
|
||||
public ServicesLaunchSequence(DsfSession session, GdbLaunch launch) {
|
||||
super(session.getExecutor());
|
||||
public ServicesLaunchSequence(DsfSession session, GdbLaunch launch, IProgressMonitor pm) {
|
||||
super(session.getExecutor(), pm, "Initializing debugger services", "Aborting debugger services initialization", null);
|
||||
fSession = session;
|
||||
fLaunch = launch;
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ import org.eclipse.core.runtime.IStatus;
|
|||
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
import org.eclipse.core.runtime.Status;
|
||||
import org.eclipse.core.runtime.SubProgressMonitor;
|
||||
import org.eclipse.dd.dsf.concurrent.ThreadSafe;
|
||||
import org.eclipse.dd.gdb.internal.provisional.launching.FinalLaunchSequence;
|
||||
import org.eclipse.dd.gdb.internal.provisional.launching.GdbLaunch;
|
||||
|
@ -84,8 +85,9 @@ public class TestLaunchDelegate extends LaunchConfigurationDelegate
|
|||
|
||||
launch.setServiceFactory(new GdbDebugServicesFactory(LaunchUtils.getGDBVersion(config)));
|
||||
|
||||
IProgressMonitor subMon1 = new SubProgressMonitor(monitor, 4, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK);
|
||||
final ServicesLaunchSequence servicesLaunchSequence =
|
||||
new ServicesLaunchSequence(launch.getSession(), launch);
|
||||
new ServicesLaunchSequence(launch.getSession(), launch, subMon1);
|
||||
launch.getSession().getExecutor().execute(servicesLaunchSequence);
|
||||
try {
|
||||
servicesLaunchSequence.get();
|
||||
|
@ -102,8 +104,9 @@ public class TestLaunchDelegate extends LaunchConfigurationDelegate
|
|||
launch.addInferiorProcess(exePath.lastSegment());
|
||||
|
||||
// Create and invoke the final launch sequence to setup GDB
|
||||
IProgressMonitor subMon2 = new SubProgressMonitor(monitor, 4, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK);
|
||||
final FinalLaunchSequence finalLaunchSequence =
|
||||
new FinalLaunchSequence(launch.getSession().getExecutor(), launch, SessionType.LOCAL, false);
|
||||
new FinalLaunchSequence(launch.getSession().getExecutor(), launch, SessionType.LOCAL, false, subMon2);
|
||||
launch.getSession().getExecutor().execute(finalLaunchSequence);
|
||||
try {
|
||||
finalLaunchSequence.get();
|
||||
|
|
Loading…
Add table
Reference in a new issue