mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-01 13:25:45 +02:00
New UI for the 'Debugger' page of launch configuration.
This commit is contained in:
parent
ce59a25fa6
commit
2a80da7743
4 changed files with 426 additions and 326 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2003-09-09 Mikhail Khodjaiants
|
||||||
|
New UI for the 'Debugger' page of launch configuration.
|
||||||
|
* CygwinDebuggerPage.java
|
||||||
|
* GDBDebuggerPage.java
|
||||||
|
* GDBSolibBlock.java
|
||||||
|
|
||||||
2003-04-07 Mikhail Khodjaiants
|
2003-04-07 Mikhail Khodjaiants
|
||||||
Replaced 'toString()' by 'getMessage()' for CDI exceptions.
|
Replaced 'toString()' by 'getMessage()' for CDI exceptions.
|
||||||
* SetAutoSolibActionDelegate.java
|
* SetAutoSolibActionDelegate.java
|
||||||
|
|
|
@ -4,197 +4,23 @@
|
||||||
*/
|
*/
|
||||||
package org.eclipse.cdt.debug.mi.internal.ui;
|
package org.eclipse.cdt.debug.mi.internal.ui;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.debug.mi.core.IMILaunchConfigurationConstants;
|
|
||||||
import org.eclipse.core.runtime.CoreException;
|
|
||||||
import org.eclipse.debug.core.ILaunchConfiguration;
|
|
||||||
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
|
|
||||||
import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
|
|
||||||
import org.eclipse.swt.SWT;
|
|
||||||
import org.eclipse.swt.events.ModifyEvent;
|
|
||||||
import org.eclipse.swt.events.ModifyListener;
|
|
||||||
import org.eclipse.swt.events.SelectionAdapter;
|
|
||||||
import org.eclipse.swt.events.SelectionEvent;
|
|
||||||
import org.eclipse.swt.layout.GridData;
|
|
||||||
import org.eclipse.swt.layout.GridLayout;
|
|
||||||
import org.eclipse.swt.widgets.Button;
|
|
||||||
import org.eclipse.swt.widgets.Composite;
|
import org.eclipse.swt.widgets.Composite;
|
||||||
import org.eclipse.swt.widgets.FileDialog;
|
|
||||||
import org.eclipse.swt.widgets.Label;
|
|
||||||
import org.eclipse.swt.widgets.Shell;
|
|
||||||
import org.eclipse.swt.widgets.Text;
|
|
||||||
|
|
||||||
public class CygwinDebuggerPage extends AbstractLaunchConfigurationTab {
|
|
||||||
|
|
||||||
protected Text fGDBCommandText;
|
public class CygwinDebuggerPage extends GDBDebuggerPage
|
||||||
protected Text fGDBInitText;
|
{
|
||||||
|
public String getName()
|
||||||
public void createControl(Composite parent) {
|
{
|
||||||
GridData gd;
|
|
||||||
Label label;
|
|
||||||
Button button;
|
|
||||||
Composite comp, subComp;
|
|
||||||
|
|
||||||
comp = new Composite(parent, SWT.NONE);
|
|
||||||
comp.setLayout(new GridLayout());
|
|
||||||
comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
|
||||||
setControl(comp);
|
|
||||||
|
|
||||||
subComp = new Composite(comp, SWT.NONE);
|
|
||||||
GridLayout gdbLayout = new GridLayout();
|
|
||||||
gdbLayout.numColumns = 2;
|
|
||||||
gdbLayout.marginHeight = 0;
|
|
||||||
gdbLayout.marginWidth = 0;
|
|
||||||
subComp.setLayout(gdbLayout);
|
|
||||||
subComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
|
||||||
|
|
||||||
label = new Label(subComp, SWT.NONE);
|
|
||||||
label.setText("GDB debugger:");
|
|
||||||
gd = new GridData();
|
|
||||||
gd.horizontalSpan = 2;
|
|
||||||
label.setLayoutData(gd);
|
|
||||||
|
|
||||||
fGDBCommandText = new Text(subComp, SWT.SINGLE | SWT.BORDER);
|
|
||||||
gd = new GridData(GridData.FILL_HORIZONTAL);
|
|
||||||
fGDBCommandText.setLayoutData(gd);
|
|
||||||
fGDBCommandText.addModifyListener(new ModifyListener() {
|
|
||||||
public void modifyText(ModifyEvent evt) {
|
|
||||||
updateLaunchConfigurationDialog();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
button = createPushButton(subComp, "&Browse...", null);
|
|
||||||
button.addSelectionListener(new SelectionAdapter() {
|
|
||||||
public void widgetSelected(SelectionEvent evt) {
|
|
||||||
handleGDBButtonSelected();
|
|
||||||
updateLaunchConfigurationDialog();
|
|
||||||
}
|
|
||||||
private void handleGDBButtonSelected() {
|
|
||||||
FileDialog dialog = new FileDialog(getShell(), SWT.NONE);
|
|
||||||
dialog.setText("GDB Command");
|
|
||||||
String gdbCommand = fGDBCommandText.getText().trim();
|
|
||||||
int lastSeparatorIndex = gdbCommand.lastIndexOf(File.separator);
|
|
||||||
if (lastSeparatorIndex != -1) {
|
|
||||||
dialog.setFilterPath(gdbCommand.substring(0, lastSeparatorIndex));
|
|
||||||
}
|
|
||||||
String res = dialog.open();
|
|
||||||
if (res == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
fGDBCommandText.setText(res);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
subComp = new Composite(comp, SWT.NONE);
|
|
||||||
gdbLayout = new GridLayout();
|
|
||||||
gdbLayout.numColumns = 2;
|
|
||||||
gdbLayout.marginHeight = 0;
|
|
||||||
gdbLayout.marginWidth = 0;
|
|
||||||
subComp.setLayout(gdbLayout);
|
|
||||||
subComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
|
||||||
|
|
||||||
label = new Label(subComp, SWT.NONE);
|
|
||||||
label.setText("GDB command file:");
|
|
||||||
gd = new GridData();
|
|
||||||
gd.horizontalSpan = 2;
|
|
||||||
label.setLayoutData(gd);
|
|
||||||
|
|
||||||
fGDBInitText = new Text(subComp, SWT.SINGLE | SWT.BORDER);
|
|
||||||
gd = new GridData(GridData.FILL_HORIZONTAL);
|
|
||||||
fGDBInitText.setLayoutData(gd);
|
|
||||||
fGDBInitText.addModifyListener(new ModifyListener() {
|
|
||||||
public void modifyText(ModifyEvent evt) {
|
|
||||||
updateLaunchConfigurationDialog();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
button = createPushButton(subComp, "&Browse...", null);
|
|
||||||
button.addSelectionListener(new SelectionAdapter() {
|
|
||||||
public void widgetSelected(SelectionEvent evt) {
|
|
||||||
handleGDBInitButtonSelected();
|
|
||||||
updateLaunchConfigurationDialog();
|
|
||||||
}
|
|
||||||
private void handleGDBInitButtonSelected() {
|
|
||||||
FileDialog dialog = new FileDialog(getShell(), SWT.NONE);
|
|
||||||
dialog.setText("GDB command file");
|
|
||||||
String gdbCommand = fGDBInitText.getText().trim();
|
|
||||||
int lastSeparatorIndex = gdbCommand.lastIndexOf(File.separator);
|
|
||||||
if (lastSeparatorIndex != -1) {
|
|
||||||
dialog.setFilterPath(gdbCommand.substring(0, lastSeparatorIndex));
|
|
||||||
}
|
|
||||||
String res = dialog.open();
|
|
||||||
if (res == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
fGDBInitText.setText(res);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
label = new Label(comp,SWT.WRAP);
|
|
||||||
label.setText("(Warning: Some commands in this file may interfere with the startup operation of the debugger, for example \"run\".)");
|
|
||||||
gd = new GridData(GridData.FILL_HORIZONTAL);
|
|
||||||
gd.horizontalSpan = 1;
|
|
||||||
gd.widthHint = 200;
|
|
||||||
label.setLayoutData(gd);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
|
|
||||||
configuration.setAttribute(IMILaunchConfigurationConstants.ATTR_DEBUG_NAME, "gdb");
|
|
||||||
configuration.setAttribute(IMILaunchConfigurationConstants.ATTR_GDB_INIT, "");
|
|
||||||
configuration.setAttribute(IMILaunchConfigurationConstants.ATTR_AUTO_SOLIB, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @see ILaunchConfigurationTab#isValid(ILaunchConfiguration)
|
|
||||||
*/
|
|
||||||
public boolean isValid(ILaunchConfiguration launchConfig) {
|
|
||||||
boolean valid = fGDBCommandText.getText().length() != 0;
|
|
||||||
if (valid) {
|
|
||||||
setErrorMessage(null);
|
|
||||||
setMessage(null);
|
|
||||||
} else {
|
|
||||||
setErrorMessage("Debugger executable must be specified");
|
|
||||||
setMessage(null);
|
|
||||||
}
|
|
||||||
return valid;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void initializeFrom(ILaunchConfiguration configuration) {
|
|
||||||
String gdbCommand = "gdb";
|
|
||||||
String gdbInit = "";
|
|
||||||
try {
|
|
||||||
gdbCommand = configuration.getAttribute(IMILaunchConfigurationConstants.ATTR_DEBUG_NAME, "gdb");
|
|
||||||
gdbInit = configuration.getAttribute(IMILaunchConfigurationConstants.ATTR_GDB_INIT, "");
|
|
||||||
} catch (CoreException e) {
|
|
||||||
}
|
|
||||||
fGDBCommandText.setText(gdbCommand);
|
|
||||||
fGDBInitText.setText(gdbInit);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void performApply(ILaunchConfigurationWorkingCopy configuration) {
|
|
||||||
String gdbStr = fGDBCommandText.getText();
|
|
||||||
gdbStr.trim();
|
|
||||||
configuration.setAttribute(IMILaunchConfigurationConstants.ATTR_DEBUG_NAME, gdbStr);
|
|
||||||
gdbStr = fGDBInitText.getText();
|
|
||||||
gdbStr.trim();
|
|
||||||
configuration.setAttribute(IMILaunchConfigurationConstants.ATTR_GDB_INIT, gdbStr);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return "Cygwin GDB Debugger Options";
|
return "Cygwin GDB Debugger Options";
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#updateLaunchConfigurationDialog()
|
|
||||||
*/
|
|
||||||
protected void updateLaunchConfigurationDialog() {
|
|
||||||
super.updateLaunchConfigurationDialog();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#getShell()
|
* @see org.eclipse.cdt.debug.mi.internal.ui.GDBDebuggerPage#createSolibBlock(org.eclipse.swt.widgets.Composite)
|
||||||
*/
|
*/
|
||||||
protected Shell getShell() {
|
public GDBSolibBlock createSolibBlock(Composite parent)
|
||||||
return super.getShell();
|
{
|
||||||
|
GDBSolibBlock block = new GDBSolibBlock();
|
||||||
|
block.createBlock( parent, true, false, true );
|
||||||
|
return block;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,8 +5,11 @@
|
||||||
package org.eclipse.cdt.debug.mi.internal.ui;
|
package org.eclipse.cdt.debug.mi.internal.ui;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.Observable;
|
||||||
|
import java.util.Observer;
|
||||||
|
|
||||||
import org.eclipse.cdt.debug.mi.core.IMILaunchConfigurationConstants;
|
import org.eclipse.cdt.debug.mi.core.IMILaunchConfigurationConstants;
|
||||||
|
import org.eclipse.cdt.utils.ui.controls.ControlFactory;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.debug.core.ILaunchConfiguration;
|
import org.eclipse.debug.core.ILaunchConfiguration;
|
||||||
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
|
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
|
||||||
|
@ -23,190 +26,263 @@ import org.eclipse.swt.widgets.Composite;
|
||||||
import org.eclipse.swt.widgets.FileDialog;
|
import org.eclipse.swt.widgets.FileDialog;
|
||||||
import org.eclipse.swt.widgets.Label;
|
import org.eclipse.swt.widgets.Label;
|
||||||
import org.eclipse.swt.widgets.Shell;
|
import org.eclipse.swt.widgets.Shell;
|
||||||
|
import org.eclipse.swt.widgets.TabFolder;
|
||||||
|
import org.eclipse.swt.widgets.TabItem;
|
||||||
import org.eclipse.swt.widgets.Text;
|
import org.eclipse.swt.widgets.Text;
|
||||||
|
|
||||||
public class GDBDebuggerPage extends AbstractLaunchConfigurationTab {
|
public class GDBDebuggerPage extends AbstractLaunchConfigurationTab implements Observer
|
||||||
|
{
|
||||||
|
private TabFolder fTabFolder;
|
||||||
protected Text fGDBCommandText;
|
protected Text fGDBCommandText;
|
||||||
protected Text fGDBInitText;
|
protected Text fGDBInitText;
|
||||||
private Button fAutoSoLibButton;
|
private GDBSolibBlock fSolibBlock;
|
||||||
|
|
||||||
public void createControl(Composite parent) {
|
public void createControl( Composite parent )
|
||||||
GridData gd;
|
{
|
||||||
Label label;
|
Composite comp = new Composite( parent, SWT.NONE );
|
||||||
Button button;
|
comp.setLayout( new GridLayout() );
|
||||||
Composite comp, subComp;
|
comp.setLayoutData( new GridData( GridData.FILL_BOTH ) );
|
||||||
|
|
||||||
comp = new Composite(parent, SWT.NONE);
|
fTabFolder = new TabFolder( comp, SWT.NONE );
|
||||||
comp.setLayout(new GridLayout());
|
fTabFolder.setLayoutData( new GridData( GridData.FILL_BOTH | GridData.GRAB_VERTICAL ) );
|
||||||
comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
|
||||||
setControl(comp);
|
|
||||||
|
|
||||||
subComp = new Composite(comp, SWT.NONE);
|
createTabs( fTabFolder );
|
||||||
GridLayout gdbLayout = new GridLayout();
|
|
||||||
gdbLayout.numColumns = 2;
|
|
||||||
gdbLayout.marginHeight = 0;
|
|
||||||
gdbLayout.marginWidth = 0;
|
|
||||||
subComp.setLayout(gdbLayout);
|
|
||||||
subComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
|
||||||
|
|
||||||
label = new Label(subComp, SWT.NONE);
|
fTabFolder.setSelection( 0 );
|
||||||
label.setText("GDB debugger:");
|
setControl( parent );
|
||||||
gd = new GridData();
|
|
||||||
gd.horizontalSpan = 2;
|
|
||||||
label.setLayoutData(gd);
|
|
||||||
|
|
||||||
fGDBCommandText = new Text(subComp, SWT.SINGLE | SWT.BORDER);
|
|
||||||
gd = new GridData(GridData.FILL_HORIZONTAL);
|
|
||||||
fGDBCommandText.setLayoutData(gd);
|
|
||||||
fGDBCommandText.addModifyListener(new ModifyListener() {
|
|
||||||
public void modifyText(ModifyEvent evt) {
|
|
||||||
updateLaunchConfigurationDialog();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
button = createPushButton(subComp, "&Browse...", null);
|
|
||||||
button.addSelectionListener(new SelectionAdapter() {
|
|
||||||
public void widgetSelected(SelectionEvent evt) {
|
|
||||||
handleGDBButtonSelected();
|
|
||||||
updateLaunchConfigurationDialog();
|
|
||||||
}
|
|
||||||
private void handleGDBButtonSelected() {
|
|
||||||
FileDialog dialog = new FileDialog(getShell(), SWT.NONE);
|
|
||||||
dialog.setText("GDB Command");
|
|
||||||
String gdbCommand = fGDBCommandText.getText().trim();
|
|
||||||
int lastSeparatorIndex = gdbCommand.lastIndexOf(File.separator);
|
|
||||||
if (lastSeparatorIndex != -1) {
|
|
||||||
dialog.setFilterPath(gdbCommand.substring(0, lastSeparatorIndex));
|
|
||||||
}
|
|
||||||
String res = dialog.open();
|
|
||||||
if (res == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
fGDBCommandText.setText(res);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
subComp = new Composite(comp, SWT.NONE);
|
|
||||||
gdbLayout = new GridLayout();
|
|
||||||
gdbLayout.numColumns = 2;
|
|
||||||
gdbLayout.marginHeight = 0;
|
|
||||||
gdbLayout.marginWidth = 0;
|
|
||||||
subComp.setLayout(gdbLayout);
|
|
||||||
subComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
|
||||||
|
|
||||||
label = new Label(subComp, SWT.NONE);
|
|
||||||
label.setText("GDB command file:");
|
|
||||||
gd = new GridData();
|
|
||||||
gd.horizontalSpan = 2;
|
|
||||||
label.setLayoutData(gd);
|
|
||||||
|
|
||||||
fGDBInitText = new Text(subComp, SWT.SINGLE | SWT.BORDER);
|
|
||||||
gd = new GridData(GridData.FILL_HORIZONTAL);
|
|
||||||
fGDBInitText.setLayoutData(gd);
|
|
||||||
fGDBInitText.addModifyListener(new ModifyListener() {
|
|
||||||
public void modifyText(ModifyEvent evt) {
|
|
||||||
updateLaunchConfigurationDialog();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
button = createPushButton(subComp, "&Browse...", null);
|
|
||||||
button.addSelectionListener(new SelectionAdapter() {
|
|
||||||
public void widgetSelected(SelectionEvent evt) {
|
|
||||||
handleGDBInitButtonSelected();
|
|
||||||
updateLaunchConfigurationDialog();
|
|
||||||
}
|
|
||||||
private void handleGDBInitButtonSelected() {
|
|
||||||
FileDialog dialog = new FileDialog(getShell(), SWT.NONE);
|
|
||||||
dialog.setText("GDB command file");
|
|
||||||
String gdbCommand = fGDBInitText.getText().trim();
|
|
||||||
int lastSeparatorIndex = gdbCommand.lastIndexOf(File.separator);
|
|
||||||
if (lastSeparatorIndex != -1) {
|
|
||||||
dialog.setFilterPath(gdbCommand.substring(0, lastSeparatorIndex));
|
|
||||||
}
|
|
||||||
String res = dialog.open();
|
|
||||||
if (res == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
fGDBInitText.setText(res);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
label = new Label(comp,SWT.WRAP);
|
|
||||||
label.setText("(Warning: Some commands in this file may interfere with the startup operation of the debugger, for example \"run\".)");
|
|
||||||
gd = new GridData(GridData.FILL_HORIZONTAL);
|
|
||||||
gd.horizontalSpan = 1;
|
|
||||||
gd.widthHint = 200;
|
|
||||||
label.setLayoutData(gd);
|
|
||||||
|
|
||||||
fAutoSoLibButton = new Button(comp, SWT.CHECK);
|
|
||||||
fAutoSoLibButton.setText("Load shared library symbols automatically");
|
|
||||||
fAutoSoLibButton.addSelectionListener(new SelectionAdapter() {
|
|
||||||
public void widgetSelected(SelectionEvent e) {
|
|
||||||
updateLaunchConfigurationDialog();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
|
public void setDefaults( ILaunchConfigurationWorkingCopy configuration )
|
||||||
configuration.setAttribute(IMILaunchConfigurationConstants.ATTR_DEBUG_NAME, "gdb");
|
{
|
||||||
configuration.setAttribute(IMILaunchConfigurationConstants.ATTR_GDB_INIT, "");
|
configuration.setAttribute( IMILaunchConfigurationConstants.ATTR_DEBUG_NAME, "gdb" );
|
||||||
configuration.setAttribute(IMILaunchConfigurationConstants.ATTR_AUTO_SOLIB, true);
|
configuration.setAttribute( IMILaunchConfigurationConstants.ATTR_GDB_INIT, "" );
|
||||||
|
if ( fSolibBlock != null )
|
||||||
|
fSolibBlock.setDefaults( configuration );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see ILaunchConfigurationTab#isValid(ILaunchConfiguration)
|
* @see ILaunchConfigurationTab#isValid(ILaunchConfiguration)
|
||||||
*/
|
*/
|
||||||
public boolean isValid(ILaunchConfiguration launchConfig) {
|
public boolean isValid( ILaunchConfiguration launchConfig )
|
||||||
|
{
|
||||||
boolean valid = fGDBCommandText.getText().length() != 0;
|
boolean valid = fGDBCommandText.getText().length() != 0;
|
||||||
if (valid) {
|
if ( valid )
|
||||||
setErrorMessage(null);
|
{
|
||||||
setMessage(null);
|
setErrorMessage( null );
|
||||||
} else {
|
setMessage( null );
|
||||||
setErrorMessage("Debugger executable must be specified");
|
}
|
||||||
setMessage(null);
|
else
|
||||||
|
{
|
||||||
|
setErrorMessage( "Debugger executable must be specified" );
|
||||||
|
setMessage( null );
|
||||||
}
|
}
|
||||||
return valid;
|
return valid;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initializeFrom(ILaunchConfiguration configuration) {
|
public void initializeFrom( ILaunchConfiguration configuration )
|
||||||
|
{
|
||||||
String gdbCommand = "gdb";
|
String gdbCommand = "gdb";
|
||||||
String gdbInit = "";
|
String gdbInit = "";
|
||||||
boolean autosolib = false;
|
try
|
||||||
try {
|
{
|
||||||
gdbCommand = configuration.getAttribute(IMILaunchConfigurationConstants.ATTR_DEBUG_NAME, "gdb");
|
gdbCommand = configuration.getAttribute( IMILaunchConfigurationConstants.ATTR_DEBUG_NAME, "gdb" );
|
||||||
gdbInit = configuration.getAttribute(IMILaunchConfigurationConstants.ATTR_GDB_INIT, "");
|
gdbInit = configuration.getAttribute( IMILaunchConfigurationConstants.ATTR_GDB_INIT, "" );
|
||||||
autosolib = configuration.getAttribute(IMILaunchConfigurationConstants.ATTR_AUTO_SOLIB, true);
|
}
|
||||||
} catch (CoreException e) {
|
catch( CoreException e )
|
||||||
|
{
|
||||||
}
|
}
|
||||||
fGDBCommandText.setText(gdbCommand);
|
fGDBCommandText.setText( gdbCommand );
|
||||||
fGDBInitText.setText(gdbInit);
|
fGDBInitText.setText( gdbInit );
|
||||||
fAutoSoLibButton.setSelection(autosolib);
|
if ( fSolibBlock != null )
|
||||||
|
fSolibBlock.initializeFrom( configuration );
|
||||||
}
|
}
|
||||||
|
|
||||||
public void performApply(ILaunchConfigurationWorkingCopy configuration) {
|
public void performApply( ILaunchConfigurationWorkingCopy configuration )
|
||||||
|
{
|
||||||
String gdbStr = fGDBCommandText.getText();
|
String gdbStr = fGDBCommandText.getText();
|
||||||
gdbStr.trim();
|
gdbStr.trim();
|
||||||
configuration.setAttribute(IMILaunchConfigurationConstants.ATTR_DEBUG_NAME, gdbStr);
|
configuration.setAttribute( IMILaunchConfigurationConstants.ATTR_DEBUG_NAME, gdbStr );
|
||||||
gdbStr = fGDBInitText.getText();
|
gdbStr = fGDBInitText.getText();
|
||||||
gdbStr.trim();
|
gdbStr.trim();
|
||||||
configuration.setAttribute(IMILaunchConfigurationConstants.ATTR_GDB_INIT, gdbStr);
|
configuration.setAttribute( IMILaunchConfigurationConstants.ATTR_GDB_INIT, gdbStr );
|
||||||
configuration.setAttribute(IMILaunchConfigurationConstants.ATTR_AUTO_SOLIB, fAutoSoLibButton.getSelection());
|
if ( fSolibBlock != null )
|
||||||
|
fSolibBlock.performApply( configuration );
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getName() {
|
public String getName()
|
||||||
|
{
|
||||||
return "GDB Debugger Options";
|
return "GDB Debugger Options";
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#getShell()
|
* @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#getShell()
|
||||||
*/
|
*/
|
||||||
protected Shell getShell() {
|
protected Shell getShell()
|
||||||
|
{
|
||||||
return super.getShell();
|
return super.getShell();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#updateLaunchConfigurationDialog()
|
* @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#updateLaunchConfigurationDialog()
|
||||||
*/
|
*/
|
||||||
protected void updateLaunchConfigurationDialog() {
|
protected void updateLaunchConfigurationDialog()
|
||||||
|
{
|
||||||
super.updateLaunchConfigurationDialog();
|
super.updateLaunchConfigurationDialog();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see java.util.Observer#update(java.util.Observable, java.lang.Object)
|
||||||
|
*/
|
||||||
|
public void update( Observable o, Object arg )
|
||||||
|
{
|
||||||
|
updateLaunchConfigurationDialog();
|
||||||
|
}
|
||||||
|
|
||||||
|
public GDBSolibBlock createSolibBlock( Composite parent )
|
||||||
|
{
|
||||||
|
GDBSolibBlock block = new GDBSolibBlock();
|
||||||
|
block.createBlock( parent, true, true, true );
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void createTabs( TabFolder tabFolder )
|
||||||
|
{
|
||||||
|
createMainTab( tabFolder );
|
||||||
|
createSolibTab( tabFolder );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void createMainTab( TabFolder tabFolder )
|
||||||
|
{
|
||||||
|
TabItem tabItem = new TabItem( tabFolder, SWT.NONE );
|
||||||
|
tabItem.setText( "Main" );
|
||||||
|
|
||||||
|
Composite comp = ControlFactory.createCompositeEx( fTabFolder, 1, GridData.FILL_BOTH );
|
||||||
|
((GridLayout)comp.getLayout()).makeColumnsEqualWidth = false;
|
||||||
|
tabItem.setControl( comp );
|
||||||
|
|
||||||
|
Composite subComp = ControlFactory.createCompositeEx( comp, 2, GridData.FILL_HORIZONTAL );
|
||||||
|
((GridLayout)subComp.getLayout()).makeColumnsEqualWidth = false;
|
||||||
|
|
||||||
|
Label label = ControlFactory.createLabel( subComp, "GDB debugger:" );
|
||||||
|
GridData gd = new GridData();
|
||||||
|
gd.horizontalSpan = 2;
|
||||||
|
label.setLayoutData( gd );
|
||||||
|
|
||||||
|
fGDBCommandText = ControlFactory.createTextField( subComp, SWT.SINGLE | SWT.BORDER );
|
||||||
|
fGDBCommandText.addModifyListener(
|
||||||
|
new ModifyListener()
|
||||||
|
{
|
||||||
|
public void modifyText( ModifyEvent evt )
|
||||||
|
{
|
||||||
|
updateLaunchConfigurationDialog();
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
|
||||||
|
Button button = createPushButton( subComp, "&Browse...", null );
|
||||||
|
button.addSelectionListener(
|
||||||
|
new SelectionAdapter()
|
||||||
|
{
|
||||||
|
public void widgetSelected( SelectionEvent evt )
|
||||||
|
{
|
||||||
|
handleGDBButtonSelected();
|
||||||
|
updateLaunchConfigurationDialog();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleGDBButtonSelected()
|
||||||
|
{
|
||||||
|
FileDialog dialog = new FileDialog( getShell(), SWT.NONE );
|
||||||
|
dialog.setText( "GDB Command" );
|
||||||
|
String gdbCommand = fGDBCommandText.getText().trim();
|
||||||
|
int lastSeparatorIndex = gdbCommand.lastIndexOf( File.separator );
|
||||||
|
if ( lastSeparatorIndex != -1 )
|
||||||
|
{
|
||||||
|
dialog.setFilterPath( gdbCommand.substring( 0, lastSeparatorIndex ) );
|
||||||
|
}
|
||||||
|
String res = dialog.open();
|
||||||
|
if ( res == null )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fGDBCommandText.setText( res );
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
|
||||||
|
label = ControlFactory.createLabel( subComp, "GDB command file:" );
|
||||||
|
gd = new GridData();
|
||||||
|
gd.horizontalSpan = 2;
|
||||||
|
label.setLayoutData( gd );
|
||||||
|
|
||||||
|
fGDBInitText = ControlFactory.createTextField( subComp, SWT.SINGLE | SWT.BORDER );
|
||||||
|
gd = new GridData( GridData.FILL_HORIZONTAL );
|
||||||
|
fGDBInitText.setLayoutData( gd );
|
||||||
|
fGDBInitText.addModifyListener( new ModifyListener()
|
||||||
|
{
|
||||||
|
public void modifyText( ModifyEvent evt )
|
||||||
|
{
|
||||||
|
updateLaunchConfigurationDialog();
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
button = createPushButton( subComp, "&Browse...", null );
|
||||||
|
button.addSelectionListener(
|
||||||
|
new SelectionAdapter()
|
||||||
|
{
|
||||||
|
public void widgetSelected( SelectionEvent evt )
|
||||||
|
{
|
||||||
|
handleGDBInitButtonSelected();
|
||||||
|
updateLaunchConfigurationDialog();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleGDBInitButtonSelected()
|
||||||
|
{
|
||||||
|
FileDialog dialog = new FileDialog( getShell(), SWT.NONE );
|
||||||
|
dialog.setText( "GDB command file" );
|
||||||
|
String gdbCommand = fGDBInitText.getText().trim();
|
||||||
|
int lastSeparatorIndex = gdbCommand.lastIndexOf( File.separator );
|
||||||
|
if ( lastSeparatorIndex != -1 )
|
||||||
|
{
|
||||||
|
dialog.setFilterPath( gdbCommand.substring( 0, lastSeparatorIndex ) );
|
||||||
|
}
|
||||||
|
String res = dialog.open();
|
||||||
|
if ( res == null )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fGDBInitText.setText( res );
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
|
||||||
|
label = ControlFactory.createLabel( comp,
|
||||||
|
"(Warning: Some commands in this file may interfere with the startup operation of the debugger, for example \"run\".)",
|
||||||
|
200,
|
||||||
|
SWT.DEFAULT,
|
||||||
|
SWT.WRAP );
|
||||||
|
gd = new GridData( GridData.FILL_HORIZONTAL );
|
||||||
|
gd.horizontalSpan = 1;
|
||||||
|
gd.widthHint = 200;
|
||||||
|
label.setLayoutData( gd );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void createSolibTab( TabFolder tabFolder )
|
||||||
|
{
|
||||||
|
TabItem tabItem = new TabItem( tabFolder, SWT.NONE );
|
||||||
|
tabItem.setText( "Shared Libraries" );
|
||||||
|
|
||||||
|
Composite comp = ControlFactory.createCompositeEx( fTabFolder, 1, GridData.FILL_BOTH );
|
||||||
|
tabItem.setControl( comp );
|
||||||
|
|
||||||
|
fSolibBlock = createSolibBlock( comp );
|
||||||
|
fSolibBlock.addObserver( this );
|
||||||
|
}
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#dispose()
|
||||||
|
*/
|
||||||
|
public void dispose()
|
||||||
|
{
|
||||||
|
if ( fSolibBlock != null )
|
||||||
|
{
|
||||||
|
fSolibBlock.deleteObserver( this );
|
||||||
|
fSolibBlock.dispose();
|
||||||
|
}
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,192 @@
|
||||||
|
/*
|
||||||
|
* (c) Copyright QNX Software System Ltd. 2002.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.eclipse.cdt.debug.mi.internal.ui;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Observable;
|
||||||
|
import java.util.Observer;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
|
||||||
|
import org.eclipse.cdt.debug.mi.core.IMILaunchConfigurationConstants;
|
||||||
|
import org.eclipse.cdt.debug.ui.SolibSearchPathBlock;
|
||||||
|
import org.eclipse.cdt.utils.ui.controls.ControlFactory;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.debug.core.ILaunchConfiguration;
|
||||||
|
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
|
||||||
|
import org.eclipse.swt.events.SelectionAdapter;
|
||||||
|
import org.eclipse.swt.events.SelectionEvent;
|
||||||
|
import org.eclipse.swt.layout.GridData;
|
||||||
|
import org.eclipse.swt.layout.GridLayout;
|
||||||
|
import org.eclipse.swt.widgets.Button;
|
||||||
|
import org.eclipse.swt.widgets.Composite;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enter type comment.
|
||||||
|
*
|
||||||
|
* @since Sep 3, 2003
|
||||||
|
*/
|
||||||
|
public class GDBSolibBlock extends Observable implements Observer
|
||||||
|
{
|
||||||
|
private SolibSearchPathBlock fSolibSearchPathBlock;
|
||||||
|
private Button fAutoSoLibButton;
|
||||||
|
private Button fStopOnSolibEventsButton;
|
||||||
|
private Composite fControl;
|
||||||
|
|
||||||
|
public GDBSolibBlock()
|
||||||
|
{
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void createBlock( Composite parent, boolean solibPath, boolean autoSolib, boolean stopOnSolibEvents )
|
||||||
|
{
|
||||||
|
Composite subComp = ControlFactory.createCompositeEx( parent, 1, GridData.FILL_HORIZONTAL );
|
||||||
|
((GridLayout)subComp.getLayout()).makeColumnsEqualWidth = false;
|
||||||
|
((GridLayout)subComp.getLayout()).marginHeight = 0;
|
||||||
|
((GridLayout)subComp.getLayout()).marginWidth = 0;
|
||||||
|
|
||||||
|
if ( solibPath )
|
||||||
|
{
|
||||||
|
fSolibSearchPathBlock = new SolibSearchPathBlock();
|
||||||
|
fSolibSearchPathBlock.createBlock( subComp );
|
||||||
|
fSolibSearchPathBlock.addObserver( this );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( autoSolib )
|
||||||
|
{
|
||||||
|
fAutoSoLibButton = ControlFactory.createCheckBox( subComp, "Load shared library symbols automatically" );
|
||||||
|
fAutoSoLibButton.addSelectionListener(
|
||||||
|
new SelectionAdapter()
|
||||||
|
{
|
||||||
|
public void widgetSelected( SelectionEvent e )
|
||||||
|
{
|
||||||
|
updateButtons();
|
||||||
|
changed();
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( stopOnSolibEvents )
|
||||||
|
{
|
||||||
|
fStopOnSolibEventsButton = ControlFactory.createCheckBox( subComp, "Stop on shared library events" );
|
||||||
|
fStopOnSolibEventsButton.addSelectionListener(
|
||||||
|
new SelectionAdapter()
|
||||||
|
{
|
||||||
|
public void widgetSelected( SelectionEvent e )
|
||||||
|
{
|
||||||
|
updateButtons();
|
||||||
|
changed();
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
setControl( subComp );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void initializeFrom( ILaunchConfiguration configuration )
|
||||||
|
{
|
||||||
|
if ( fSolibSearchPathBlock != null )
|
||||||
|
fSolibSearchPathBlock.initializeFrom( configuration );
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if ( fAutoSoLibButton != null )
|
||||||
|
fAutoSoLibButton.setSelection( configuration.getAttribute( IMILaunchConfigurationConstants.ATTR_DEBUGGER_AUTO_SOLIB, true ) );
|
||||||
|
if ( fStopOnSolibEventsButton != null )
|
||||||
|
fStopOnSolibEventsButton.setSelection( configuration.getAttribute( IMILaunchConfigurationConstants.ATTR_DEBUGGER_STOP_ON_SOLIB_EVENTS, false ) );
|
||||||
|
initializeButtons( configuration );
|
||||||
|
updateButtons();
|
||||||
|
}
|
||||||
|
catch( CoreException e )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void performApply( ILaunchConfigurationWorkingCopy configuration )
|
||||||
|
{
|
||||||
|
if ( fSolibSearchPathBlock != null )
|
||||||
|
fSolibSearchPathBlock.performApply( configuration );
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Map attrs = configuration.getAttributes();
|
||||||
|
if ( fAutoSoLibButton != null )
|
||||||
|
attrs.put( IMILaunchConfigurationConstants.ATTR_DEBUGGER_AUTO_SOLIB, new Boolean( fAutoSoLibButton.getSelection() ) );
|
||||||
|
if ( fStopOnSolibEventsButton != null )
|
||||||
|
attrs.put( IMILaunchConfigurationConstants.ATTR_DEBUGGER_STOP_ON_SOLIB_EVENTS, new Boolean( fStopOnSolibEventsButton.getSelection() ) );
|
||||||
|
configuration.setAttributes( attrs );
|
||||||
|
}
|
||||||
|
catch( CoreException e )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDefaults( ILaunchConfigurationWorkingCopy configuration )
|
||||||
|
{
|
||||||
|
if ( fSolibSearchPathBlock != null )
|
||||||
|
fSolibSearchPathBlock.setDefaults( configuration );
|
||||||
|
configuration.setAttribute( IMILaunchConfigurationConstants.ATTR_DEBUGGER_AUTO_SOLIB, true );
|
||||||
|
configuration.setAttribute( IMILaunchConfigurationConstants.ATTR_DEBUGGER_STOP_ON_SOLIB_EVENTS, false );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void updateButtons()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void dispose()
|
||||||
|
{
|
||||||
|
deleteObservers();
|
||||||
|
if ( fSolibSearchPathBlock != null )
|
||||||
|
{
|
||||||
|
fSolibSearchPathBlock.deleteObserver( this );
|
||||||
|
fSolibSearchPathBlock.dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void disable()
|
||||||
|
{
|
||||||
|
if ( fAutoSoLibButton != null )
|
||||||
|
fAutoSoLibButton.setEnabled( false );
|
||||||
|
if ( fStopOnSolibEventsButton != null )
|
||||||
|
fStopOnSolibEventsButton.setEnabled( false );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see java.util.Observer#update(java.util.Observable, java.lang.Object)
|
||||||
|
*/
|
||||||
|
public void update( Observable o, Object arg )
|
||||||
|
{
|
||||||
|
changed();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void changed()
|
||||||
|
{
|
||||||
|
setChanged();
|
||||||
|
notifyObservers();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Composite getControl()
|
||||||
|
{
|
||||||
|
return fControl;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setControl( Composite composite )
|
||||||
|
{
|
||||||
|
fControl = composite;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void initializeButtons( ILaunchConfiguration configuration )
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
boolean enable = !ICDTLaunchConfigurationConstants.DEBUGGER_MODE_CORE.equals( configuration.getAttribute( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, "" ) );
|
||||||
|
if ( fAutoSoLibButton != null )
|
||||||
|
fAutoSoLibButton.setEnabled( enable );
|
||||||
|
if ( fStopOnSolibEventsButton != null )
|
||||||
|
fStopOnSolibEventsButton.setEnabled( enable );
|
||||||
|
}
|
||||||
|
catch( CoreException e )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue