mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-04 06:45:43 +02:00
Bug 338730: GDB does not like that we set the binary after we set the trace file
This commit is contained in:
parent
b2b1f129d1
commit
88c24240fe
2 changed files with 136 additions and 128 deletions
|
@ -24,7 +24,6 @@ import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
|
||||||
import org.eclipse.cdt.dsf.concurrent.ReflectionSequence;
|
import org.eclipse.cdt.dsf.concurrent.ReflectionSequence;
|
||||||
import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
|
import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
|
||||||
import org.eclipse.cdt.dsf.concurrent.RequestMonitorWithProgress;
|
import org.eclipse.cdt.dsf.concurrent.RequestMonitorWithProgress;
|
||||||
import org.eclipse.cdt.dsf.datamodel.DMContexts;
|
|
||||||
import org.eclipse.cdt.dsf.datamodel.DataModelInitializedEvent;
|
import org.eclipse.cdt.dsf.datamodel.DataModelInitializedEvent;
|
||||||
import org.eclipse.cdt.dsf.datamodel.IDMContext;
|
import org.eclipse.cdt.dsf.datamodel.IDMContext;
|
||||||
import org.eclipse.cdt.dsf.debug.service.ISourceLookup.ISourceLookupDMContext;
|
import org.eclipse.cdt.dsf.debug.service.ISourceLookup.ISourceLookupDMContext;
|
||||||
|
@ -33,8 +32,6 @@ import org.eclipse.cdt.dsf.gdb.IGdbDebugPreferenceConstants;
|
||||||
import org.eclipse.cdt.dsf.gdb.actions.IConnect;
|
import org.eclipse.cdt.dsf.gdb.actions.IConnect;
|
||||||
import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin;
|
import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin;
|
||||||
import org.eclipse.cdt.dsf.gdb.service.IGDBBackend;
|
import org.eclipse.cdt.dsf.gdb.service.IGDBBackend;
|
||||||
import org.eclipse.cdt.dsf.gdb.service.IGDBTraceControl;
|
|
||||||
import org.eclipse.cdt.dsf.gdb.service.IGDBTraceControl.ITraceTargetDMContext;
|
|
||||||
import org.eclipse.cdt.dsf.gdb.service.SessionType;
|
import org.eclipse.cdt.dsf.gdb.service.SessionType;
|
||||||
import org.eclipse.cdt.dsf.gdb.service.command.IGDBControl;
|
import org.eclipse.cdt.dsf.gdb.service.command.IGDBControl;
|
||||||
import org.eclipse.cdt.dsf.mi.service.CSourceLookup;
|
import org.eclipse.cdt.dsf.mi.service.CSourceLookup;
|
||||||
|
@ -45,14 +42,10 @@ import org.eclipse.cdt.dsf.service.DsfServicesTracker;
|
||||||
import org.eclipse.cdt.dsf.service.DsfSession;
|
import org.eclipse.cdt.dsf.service.DsfSession;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
import org.eclipse.core.runtime.Platform;
|
import org.eclipse.core.runtime.Platform;
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
import org.eclipse.core.runtime.jobs.Job;
|
|
||||||
import org.eclipse.debug.core.DebugPlugin;
|
|
||||||
import org.eclipse.debug.core.ILaunch;
|
import org.eclipse.debug.core.ILaunch;
|
||||||
import org.eclipse.debug.core.IStatusHandler;
|
|
||||||
|
|
||||||
public class FinalLaunchSequence extends ReflectionSequence {
|
public class FinalLaunchSequence extends ReflectionSequence {
|
||||||
|
|
||||||
|
@ -98,8 +91,6 @@ public class FinalLaunchSequence extends ReflectionSequence {
|
||||||
//
|
//
|
||||||
// "stepSetSourceLookupPath", //$NON-NLS-1$
|
// "stepSetSourceLookupPath", //$NON-NLS-1$
|
||||||
|
|
||||||
// For post-mortem launch only
|
|
||||||
"stepSpecifyCoreFile", //$NON-NLS-1$
|
|
||||||
// For remote-attach launch only
|
// For remote-attach launch only
|
||||||
"stepRemoteConnection", //$NON-NLS-1$
|
"stepRemoteConnection", //$NON-NLS-1$
|
||||||
// For all launches except attach ones
|
// For all launches except attach ones
|
||||||
|
@ -360,125 +351,6 @@ public class FinalLaunchSequence extends ReflectionSequence {
|
||||||
sourceLookup.setSourceLookupPath(sourceLookupDmc, locator.getSourceContainers(), requestMonitor);
|
sourceLookup.setSourceLookupPath(sourceLookupDmc, locator.getSourceContainers(), requestMonitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @since 4.0 */
|
|
||||||
protected class PromptForCoreJob extends Job {
|
|
||||||
protected DataRequestMonitor<String> fRequestMonitor;
|
|
||||||
|
|
||||||
public PromptForCoreJob(String name, DataRequestMonitor<String> rm) {
|
|
||||||
super(name);
|
|
||||||
fRequestMonitor = rm;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected IStatus run(IProgressMonitor monitor) {
|
|
||||||
final IStatus promptStatus = new Status(IStatus.INFO, "org.eclipse.debug.ui", 200/*STATUS_HANDLER_PROMPT*/, "", null); //$NON-NLS-1$//$NON-NLS-2$
|
|
||||||
final IStatus filePrompt = new Status(IStatus.INFO, "org.eclipse.cdt.dsf.gdb.ui", 1001, "", null); //$NON-NLS-1$//$NON-NLS-2$
|
|
||||||
// consult a status handler
|
|
||||||
final IStatusHandler prompter = DebugPlugin.getDefault().getStatusHandler(promptStatus);
|
|
||||||
|
|
||||||
final Status NO_CORE_STATUS = new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, -1,
|
|
||||||
LaunchMessages.getString("LocalCDILaunchDelegate.6"), //$NON-NLS-1$
|
|
||||||
null);
|
|
||||||
|
|
||||||
if (prompter == null) {
|
|
||||||
fRequestMonitor.setStatus(NO_CORE_STATUS);
|
|
||||||
fRequestMonitor.done();
|
|
||||||
return Status.OK_STATUS;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
Object result = prompter.handleStatus(filePrompt, null);
|
|
||||||
if (result == null) {
|
|
||||||
fRequestMonitor.cancel();
|
|
||||||
} else if (result instanceof String) {
|
|
||||||
fRequestMonitor.setData((String)result);
|
|
||||||
} else {
|
|
||||||
fRequestMonitor.setStatus(NO_CORE_STATUS);
|
|
||||||
}
|
|
||||||
} catch (CoreException e) {
|
|
||||||
fRequestMonitor.setStatus(NO_CORE_STATUS);
|
|
||||||
}
|
|
||||||
fRequestMonitor.done();
|
|
||||||
|
|
||||||
return Status.OK_STATUS;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If we are dealing with a post-mortem debug session, specify the core file.
|
|
||||||
* @since 4.0
|
|
||||||
*/
|
|
||||||
@Execute
|
|
||||||
public void stepSpecifyCoreFile(final RequestMonitor requestMonitor) {
|
|
||||||
if (fGDBBackend.getSessionType() == SessionType.CORE) {
|
|
||||||
String coreFile = CDebugUtils.getAttribute(
|
|
||||||
fAttributes,
|
|
||||||
ICDTLaunchConfigurationConstants.ATTR_COREFILE_PATH, ""); //$NON-NLS-1$
|
|
||||||
final String coreType = CDebugUtils.getAttribute(
|
|
||||||
fAttributes,
|
|
||||||
IGDBLaunchConfigurationConstants.ATTR_DEBUGGER_POST_MORTEM_TYPE,
|
|
||||||
IGDBLaunchConfigurationConstants.DEBUGGER_POST_MORTEM_TYPE_DEFAULT);
|
|
||||||
|
|
||||||
if (coreFile.length() == 0) {
|
|
||||||
new PromptForCoreJob(
|
|
||||||
"Prompt for post mortem file", //$NON-NLS-1$
|
|
||||||
new DataRequestMonitor<String>(getExecutor(), requestMonitor) {
|
|
||||||
@Override
|
|
||||||
protected void handleCancel() {
|
|
||||||
requestMonitor.cancel();
|
|
||||||
requestMonitor.done();
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
protected void handleSuccess() {
|
|
||||||
String newCoreFile = getData();
|
|
||||||
if (newCoreFile == null || newCoreFile.length()== 0) {
|
|
||||||
requestMonitor.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, -1, "Cannot get post mortem file path", null)); //$NON-NLS-1$
|
|
||||||
requestMonitor.done();
|
|
||||||
} else {
|
|
||||||
if (coreType.equals(IGDBLaunchConfigurationConstants.DEBUGGER_POST_MORTEM_CORE_FILE)) {
|
|
||||||
fCommandControl.queueCommand(
|
|
||||||
fCommandFactory.createMITargetSelectCore(fCommandControl.getContext(), newCoreFile),
|
|
||||||
new DataRequestMonitor<MIInfo>(getExecutor(), requestMonitor));
|
|
||||||
} else if (coreType.equals(IGDBLaunchConfigurationConstants.DEBUGGER_POST_MORTEM_TRACE_FILE)) {
|
|
||||||
IGDBTraceControl traceControl = fTracker.getService(IGDBTraceControl.class);
|
|
||||||
if (traceControl != null) {
|
|
||||||
ITraceTargetDMContext targetDmc = DMContexts.getAncestorOfType(fCommandControl.getContext(), ITraceTargetDMContext.class);
|
|
||||||
traceControl.loadTraceData(targetDmc, newCoreFile, requestMonitor);
|
|
||||||
} else {
|
|
||||||
requestMonitor.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, -1, "Tracing not supported", null));
|
|
||||||
requestMonitor.done();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
requestMonitor.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, -1, "Invalid post-mortem type", null));
|
|
||||||
requestMonitor.done();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).schedule();
|
|
||||||
} else {
|
|
||||||
if (coreType.equals(IGDBLaunchConfigurationConstants.DEBUGGER_POST_MORTEM_CORE_FILE)) {
|
|
||||||
fCommandControl.queueCommand(
|
|
||||||
fCommandFactory.createMITargetSelectCore(fCommandControl.getContext(), coreFile),
|
|
||||||
new DataRequestMonitor<MIInfo>(getExecutor(), requestMonitor));
|
|
||||||
} else if (coreType.equals(IGDBLaunchConfigurationConstants.DEBUGGER_POST_MORTEM_TRACE_FILE)) {
|
|
||||||
IGDBTraceControl traceControl = fTracker.getService(IGDBTraceControl.class);
|
|
||||||
if (traceControl != null) {
|
|
||||||
ITraceTargetDMContext targetDmc = DMContexts.getAncestorOfType(fCommandControl.getContext(), ITraceTargetDMContext.class);
|
|
||||||
traceControl.loadTraceData(targetDmc, coreFile, requestMonitor);
|
|
||||||
} else {
|
|
||||||
requestMonitor.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, -1, "Tracing not supported", null));
|
|
||||||
requestMonitor.done();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
requestMonitor.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, -1, "Invalid post-mortem type", null));
|
|
||||||
requestMonitor.done();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
requestMonitor.done();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private final static String INVALID = "invalid"; //$NON-NLS-1$
|
private final static String INVALID = "invalid"; //$NON-NLS-1$
|
||||||
/**
|
/**
|
||||||
* If we are dealing with a remote-attach debugging session, connect to the target.
|
* If we are dealing with a remote-attach debugging session, connect to the target.
|
||||||
|
|
|
@ -27,6 +27,8 @@ import org.eclipse.cdt.dsf.debug.service.IBreakpoints.IBreakpointsTargetDMContex
|
||||||
import org.eclipse.cdt.dsf.debug.service.IRunControl.IContainerDMContext;
|
import org.eclipse.cdt.dsf.debug.service.IRunControl.IContainerDMContext;
|
||||||
import org.eclipse.cdt.dsf.gdb.IGDBLaunchConfigurationConstants;
|
import org.eclipse.cdt.dsf.gdb.IGDBLaunchConfigurationConstants;
|
||||||
import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin;
|
import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin;
|
||||||
|
import org.eclipse.cdt.dsf.gdb.launching.LaunchMessages;
|
||||||
|
import org.eclipse.cdt.dsf.gdb.service.IGDBTraceControl.ITraceTargetDMContext;
|
||||||
import org.eclipse.cdt.dsf.gdb.service.command.IGDBControl;
|
import org.eclipse.cdt.dsf.gdb.service.command.IGDBControl;
|
||||||
import org.eclipse.cdt.dsf.mi.service.IMICommandControl;
|
import org.eclipse.cdt.dsf.mi.service.IMICommandControl;
|
||||||
import org.eclipse.cdt.dsf.mi.service.IMIContainerDMContext;
|
import org.eclipse.cdt.dsf.mi.service.IMIContainerDMContext;
|
||||||
|
@ -36,8 +38,12 @@ import org.eclipse.cdt.dsf.mi.service.command.CommandFactory;
|
||||||
import org.eclipse.cdt.dsf.mi.service.command.output.MIInfo;
|
import org.eclipse.cdt.dsf.mi.service.command.output.MIInfo;
|
||||||
import org.eclipse.cdt.dsf.service.DsfServicesTracker;
|
import org.eclipse.cdt.dsf.service.DsfServicesTracker;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
|
import org.eclipse.core.runtime.jobs.Job;
|
||||||
|
import org.eclipse.debug.core.DebugPlugin;
|
||||||
|
import org.eclipse.debug.core.IStatusHandler;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This sequence is used to start debugging a new process.
|
* This sequence is used to start debugging a new process.
|
||||||
|
@ -87,7 +93,12 @@ public class DebugNewProcessSequence extends ReflectionSequence {
|
||||||
"stepSetEnvironmentVariables", //$NON-NLS-1$
|
"stepSetEnvironmentVariables", //$NON-NLS-1$
|
||||||
"stepSetExecutable", //$NON-NLS-1$
|
"stepSetExecutable", //$NON-NLS-1$
|
||||||
"stepSetArguments", //$NON-NLS-1$
|
"stepSetArguments", //$NON-NLS-1$
|
||||||
|
|
||||||
|
// For remote non-attach only
|
||||||
"stepRemoteConnection", //$NON-NLS-1$
|
"stepRemoteConnection", //$NON-NLS-1$
|
||||||
|
// For post-mortem launch only
|
||||||
|
"stepSpecifyCoreFile", //$NON-NLS-1$
|
||||||
|
|
||||||
"stepStartTrackingBreakpoints", //$NON-NLS-1$
|
"stepStartTrackingBreakpoints", //$NON-NLS-1$
|
||||||
"stepStartExecution", //$NON-NLS-1$
|
"stepStartExecution", //$NON-NLS-1$
|
||||||
"stepCleanupBaseSequence", //$NON-NLS-1$
|
"stepCleanupBaseSequence", //$NON-NLS-1$
|
||||||
|
@ -243,6 +254,131 @@ public class DebugNewProcessSequence extends ReflectionSequence {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @since 4.0 */
|
||||||
|
protected static class PromptForCoreJob extends Job {
|
||||||
|
protected DataRequestMonitor<String> fRequestMonitor;
|
||||||
|
|
||||||
|
public PromptForCoreJob(String name, DataRequestMonitor<String> rm) {
|
||||||
|
super(name);
|
||||||
|
fRequestMonitor = rm;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected IStatus run(IProgressMonitor monitor) {
|
||||||
|
final IStatus promptStatus = new Status(IStatus.INFO, "org.eclipse.debug.ui", 200/*STATUS_HANDLER_PROMPT*/, "", null); //$NON-NLS-1$//$NON-NLS-2$
|
||||||
|
final IStatus filePrompt = new Status(IStatus.INFO, "org.eclipse.cdt.dsf.gdb.ui", 1001, "", null); //$NON-NLS-1$//$NON-NLS-2$
|
||||||
|
// consult a status handler
|
||||||
|
final IStatusHandler prompter = DebugPlugin.getDefault().getStatusHandler(promptStatus);
|
||||||
|
|
||||||
|
final Status NO_CORE_STATUS = new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, -1,
|
||||||
|
LaunchMessages.getString("LocalCDILaunchDelegate.6"), //$NON-NLS-1$
|
||||||
|
null);
|
||||||
|
|
||||||
|
if (prompter == null) {
|
||||||
|
fRequestMonitor.setStatus(NO_CORE_STATUS);
|
||||||
|
fRequestMonitor.done();
|
||||||
|
return Status.OK_STATUS;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Object result = prompter.handleStatus(filePrompt, null);
|
||||||
|
if (result == null) {
|
||||||
|
fRequestMonitor.cancel();
|
||||||
|
} else if (result instanceof String) {
|
||||||
|
fRequestMonitor.setData((String)result);
|
||||||
|
} else {
|
||||||
|
fRequestMonitor.setStatus(NO_CORE_STATUS);
|
||||||
|
}
|
||||||
|
} catch (CoreException e) {
|
||||||
|
fRequestMonitor.setStatus(NO_CORE_STATUS);
|
||||||
|
}
|
||||||
|
fRequestMonitor.done();
|
||||||
|
|
||||||
|
return Status.OK_STATUS;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If we are dealing with a postmortem session, connect to the core/trace file.
|
||||||
|
* @since 4.0
|
||||||
|
*/
|
||||||
|
@Execute
|
||||||
|
public void stepSpecifyCoreFile(final RequestMonitor rm) {
|
||||||
|
// If we are dealing with a postmortem session, it is now time to connect
|
||||||
|
// to the core/trace file. We have to do this step after
|
||||||
|
// we have specified the executable, so we have to do it here.
|
||||||
|
// It is safe to do it here because a postmortem session does not support
|
||||||
|
// multi-process so this step will not be executed more than once.
|
||||||
|
// Bug 338730
|
||||||
|
if (fBackend.getSessionType() == SessionType.CORE) {
|
||||||
|
String coreFile = CDebugUtils.getAttribute(
|
||||||
|
fAttributes,
|
||||||
|
ICDTLaunchConfigurationConstants.ATTR_COREFILE_PATH, ""); //$NON-NLS-1$
|
||||||
|
final String coreType = CDebugUtils.getAttribute(
|
||||||
|
fAttributes,
|
||||||
|
IGDBLaunchConfigurationConstants.ATTR_DEBUGGER_POST_MORTEM_TYPE,
|
||||||
|
IGDBLaunchConfigurationConstants.DEBUGGER_POST_MORTEM_TYPE_DEFAULT);
|
||||||
|
|
||||||
|
if (coreFile.length() == 0) {
|
||||||
|
new PromptForCoreJob(
|
||||||
|
"Prompt for post mortem file", //$NON-NLS-1$
|
||||||
|
new DataRequestMonitor<String>(getExecutor(), rm) {
|
||||||
|
@Override
|
||||||
|
protected void handleCancel() {
|
||||||
|
rm.cancel();
|
||||||
|
rm.done();
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
protected void handleSuccess() {
|
||||||
|
String newCoreFile = getData();
|
||||||
|
if (newCoreFile == null || newCoreFile.length()== 0) {
|
||||||
|
rm.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, -1, "Cannot get post mortem file path", null)); //$NON-NLS-1$
|
||||||
|
rm.done();
|
||||||
|
} else {
|
||||||
|
if (coreType.equals(IGDBLaunchConfigurationConstants.DEBUGGER_POST_MORTEM_CORE_FILE)) {
|
||||||
|
fCommandControl.queueCommand(
|
||||||
|
fCommandFactory.createMITargetSelectCore(fCommandControl.getContext(), newCoreFile),
|
||||||
|
new DataRequestMonitor<MIInfo>(getExecutor(), rm));
|
||||||
|
} else if (coreType.equals(IGDBLaunchConfigurationConstants.DEBUGGER_POST_MORTEM_TRACE_FILE)) {
|
||||||
|
IGDBTraceControl traceControl = fTracker.getService(IGDBTraceControl.class);
|
||||||
|
if (traceControl != null) {
|
||||||
|
ITraceTargetDMContext targetDmc = DMContexts.getAncestorOfType(fCommandControl.getContext(), ITraceTargetDMContext.class);
|
||||||
|
traceControl.loadTraceData(targetDmc, newCoreFile, rm);
|
||||||
|
} else {
|
||||||
|
rm.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, -1, "Tracing not supported", null));
|
||||||
|
rm.done();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
rm.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, -1, "Invalid post-mortem type", null));
|
||||||
|
rm.done();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).schedule();
|
||||||
|
} else {
|
||||||
|
if (coreType.equals(IGDBLaunchConfigurationConstants.DEBUGGER_POST_MORTEM_CORE_FILE)) {
|
||||||
|
fCommandControl.queueCommand(
|
||||||
|
fCommandFactory.createMITargetSelectCore(fCommandControl.getContext(), coreFile),
|
||||||
|
new DataRequestMonitor<MIInfo>(getExecutor(), rm));
|
||||||
|
} else if (coreType.equals(IGDBLaunchConfigurationConstants.DEBUGGER_POST_MORTEM_TRACE_FILE)) {
|
||||||
|
IGDBTraceControl traceControl = fTracker.getService(IGDBTraceControl.class);
|
||||||
|
if (traceControl != null) {
|
||||||
|
ITraceTargetDMContext targetDmc = DMContexts.getAncestorOfType(fCommandControl.getContext(), ITraceTargetDMContext.class);
|
||||||
|
traceControl.loadTraceData(targetDmc, coreFile, rm);
|
||||||
|
} else {
|
||||||
|
rm.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, -1, "Tracing not supported", null));
|
||||||
|
rm.done();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
rm.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, -1, "Invalid post-mortem type", null));
|
||||||
|
rm.done();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
rm.done();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Start tracking the breakpoints. Note that for remote debugging
|
* Start tracking the breakpoints. Note that for remote debugging
|
||||||
* we should first connect to the target.
|
* we should first connect to the target.
|
||||||
|
|
Loading…
Add table
Reference in a new issue