mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Bug 352998: [remote][attach] Cannot do a remote-attach session with GDB7.2 and CDT8.0
This commit is contained in:
parent
5390306aa9
commit
0d7bc691d2
1 changed files with 72 additions and 59 deletions
|
@ -233,74 +233,44 @@ public class GDBProcesses_7_2 extends GDBProcesses_7_1 {
|
||||||
},
|
},
|
||||||
new Step() {
|
new Step() {
|
||||||
@Override
|
@Override
|
||||||
public void execute(RequestMonitor rm) {
|
public void execute(final RequestMonitor rm) {
|
||||||
// Now, set the binary to be used.
|
// Now, set the binary to be used.
|
||||||
if (binaryPath != null) {
|
if (binaryPath != null) {
|
||||||
fCommandControl.queueCommand(
|
fCommandControl.queueCommand(
|
||||||
fCommandFactory.createMIFileExecAndSymbols(fContainerDmc, binaryPath),
|
fCommandFactory.createMIFileExecAndSymbols(fContainerDmc, binaryPath),
|
||||||
new DataRequestMonitor<MIInfo>(ImmediateExecutor.getInstance(), rm));
|
new DataRequestMonitor<MIInfo>(ImmediateExecutor.getInstance(), rm) {
|
||||||
|
@Override
|
||||||
|
protected void handleCompleted() {
|
||||||
|
// Because of a GDB 7.2 bug, for remote-attach sessions,
|
||||||
|
// we need to be disconnected from the target
|
||||||
|
// when we set the very first binary to be used.
|
||||||
|
// Now that we have disconnected and set the binary,
|
||||||
|
// we may need to reconnect to the target.
|
||||||
|
// If we were unable to set the binary (e.g., if the specified path
|
||||||
|
// is invalid) we also need to reconnect to the target before
|
||||||
|
// aborting the rest of the sequence.
|
||||||
|
// Bug 352998
|
||||||
|
|
||||||
|
if (fNeedToReconnect) {
|
||||||
|
fNeedToReconnect = false;
|
||||||
|
|
||||||
|
// Set the status in case it is an error, so that when rm.done() is automatically
|
||||||
|
// called, we continue to abort the sequence if we are dealing with a failure.
|
||||||
|
rm.setStatus(getStatus());
|
||||||
|
|
||||||
|
connectToTarget(procCtx, rm);
|
||||||
|
} else {
|
||||||
|
super.handleCompleted();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assert fNeedToReconnect == false;
|
||||||
rm.done();
|
rm.done();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
new Step() {
|
|
||||||
@Override
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public void execute(final RequestMonitor rm) {
|
|
||||||
// Because of a GDB 7.2 bug, for remote-attach sessions,
|
|
||||||
// we need to be disconnected from the target
|
|
||||||
// when we set the very first binary to be used.
|
|
||||||
// Now that we have disconnected and set the binary,
|
|
||||||
// lets reconnect.
|
|
||||||
// Bug 352998
|
|
||||||
if (fNeedToReconnect) {
|
|
||||||
fNeedToReconnect = false;
|
|
||||||
ILaunch launch = (ILaunch)procCtx.getAdapter(ILaunch.class);
|
|
||||||
assert launch != null;
|
|
||||||
if (launch != null) {
|
|
||||||
Map<String, Object> attributes = null;
|
|
||||||
try {
|
|
||||||
attributes = launch.getLaunchConfiguration().getAttributes();
|
|
||||||
} catch (CoreException e) {}
|
|
||||||
|
|
||||||
boolean isTcpConnection = CDebugUtils.getAttribute(
|
|
||||||
attributes,
|
|
||||||
IGDBLaunchConfigurationConstants.ATTR_REMOTE_TCP,
|
|
||||||
false);
|
|
||||||
|
|
||||||
if (isTcpConnection) {
|
|
||||||
String remoteTcpHost = CDebugUtils.getAttribute(
|
|
||||||
attributes,
|
|
||||||
IGDBLaunchConfigurationConstants.ATTR_HOST, INVALID);
|
|
||||||
String remoteTcpPort = CDebugUtils.getAttribute(
|
|
||||||
attributes,
|
|
||||||
IGDBLaunchConfigurationConstants.ATTR_PORT, INVALID);
|
|
||||||
|
|
||||||
fCommandControl.queueCommand(
|
|
||||||
fCommandFactory.createMITargetSelect(fCommandControl.getContext(),
|
|
||||||
remoteTcpHost, remoteTcpPort, true),
|
|
||||||
new DataRequestMonitor<MIInfo>(ImmediateExecutor.getInstance(), rm));
|
|
||||||
} else {
|
|
||||||
String serialDevice = CDebugUtils.getAttribute(
|
|
||||||
attributes,
|
|
||||||
IGDBLaunchConfigurationConstants.ATTR_DEV, INVALID);
|
|
||||||
|
|
||||||
fCommandControl.queueCommand(
|
|
||||||
fCommandFactory.createMITargetSelect(fCommandControl.getContext(),
|
|
||||||
serialDevice, true),
|
|
||||||
new DataRequestMonitor<MIInfo>(ImmediateExecutor.getInstance(), rm));
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
rm.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, INTERNAL_ERROR, "Cannot reconnect to target.", null)); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
rm.done();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// Now, actually do the attach
|
// Now, actually do the attach
|
||||||
new Step() {
|
new Step() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -372,6 +342,49 @@ public class GDBProcesses_7_2 extends GDBProcesses_7_1 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
private void connectToTarget(IProcessDMContext procCtx, RequestMonitor rm) {
|
||||||
|
ILaunch launch = (ILaunch)procCtx.getAdapter(ILaunch.class);
|
||||||
|
assert launch != null;
|
||||||
|
if (launch != null) {
|
||||||
|
Map<String, Object> attributes = null;
|
||||||
|
try {
|
||||||
|
attributes = launch.getLaunchConfiguration().getAttributes();
|
||||||
|
} catch (CoreException e) {}
|
||||||
|
|
||||||
|
boolean isTcpConnection = CDebugUtils.getAttribute(
|
||||||
|
attributes,
|
||||||
|
IGDBLaunchConfigurationConstants.ATTR_REMOTE_TCP,
|
||||||
|
false);
|
||||||
|
|
||||||
|
if (isTcpConnection) {
|
||||||
|
String remoteTcpHost = CDebugUtils.getAttribute(
|
||||||
|
attributes,
|
||||||
|
IGDBLaunchConfigurationConstants.ATTR_HOST, INVALID);
|
||||||
|
String remoteTcpPort = CDebugUtils.getAttribute(
|
||||||
|
attributes,
|
||||||
|
IGDBLaunchConfigurationConstants.ATTR_PORT, INVALID);
|
||||||
|
|
||||||
|
fCommandControl.queueCommand(
|
||||||
|
fCommandFactory.createMITargetSelect(fCommandControl.getContext(),
|
||||||
|
remoteTcpHost, remoteTcpPort, true),
|
||||||
|
new DataRequestMonitor<MIInfo>(ImmediateExecutor.getInstance(), rm));
|
||||||
|
} else {
|
||||||
|
String serialDevice = CDebugUtils.getAttribute(
|
||||||
|
attributes,
|
||||||
|
IGDBLaunchConfigurationConstants.ATTR_DEV, INVALID);
|
||||||
|
|
||||||
|
fCommandControl.queueCommand(
|
||||||
|
fCommandFactory.createMITargetSelect(fCommandControl.getContext(),
|
||||||
|
serialDevice, true),
|
||||||
|
new DataRequestMonitor<MIInfo>(ImmediateExecutor.getInstance(), rm));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
rm.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, INTERNAL_ERROR, "Cannot reconnect to target.", null)); //$NON-NLS-1$
|
||||||
|
rm.done();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void detachDebuggerFromProcess(IDMContext dmc, final RequestMonitor rm) {
|
public void detachDebuggerFromProcess(IDMContext dmc, final RequestMonitor rm) {
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue