1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-23 14:42:11 +02:00

Bug 118894: Allow stopping at other locations other than main(). Applied patch from Ken Ryall (Nokia).

This commit is contained in:
Mikhail Khodjaiants 2006-01-30 02:23:02 +00:00
parent 037c32a015
commit f96f4300b0
6 changed files with 69 additions and 8 deletions

View file

@ -1,3 +1,9 @@
2006-01-29 Mikhail Khodjaiants
Bug 118894: Allow stopping at other locations other than main().
Applied patch from Ken Ryall (Nokia).
* ICDTLaunchConfigurationConstants.java
* CDebugTarget.java
2006-01-23 Mikhail Khodjaiants 2006-01-23 Mikhail Khodjaiants
Bug 119683: long messages during launch cause gdb to timeout, launch to fail. Bug 119683: long messages during launch cause gdb to timeout, launch to fail.
New "createSession" method accepts File instead of IBinaryObject. New "createSession" method accepts File instead of IBinaryObject.

View file

@ -7,6 +7,7 @@
* *
* Contributors: * Contributors:
* QNX Software Systems - initial API and implementation * QNX Software Systems - initial API and implementation
* Ken Ryall (Nokia) - https://bugs.eclipse.org/bugs/show_bug.cgi?id=118894
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.debug.core; package org.eclipse.cdt.debug.core;
@ -104,6 +105,12 @@ public interface ICDTLaunchConfigurationConstants {
*/ */
public static final String ATTR_DEBUGGER_STOP_AT_MAIN = CDT_LAUNCH_ID + ".DEBUGGER_STOP_AT_MAIN"; //$NON-NLS-1$ public static final String ATTR_DEBUGGER_STOP_AT_MAIN = CDT_LAUNCH_ID + ".DEBUGGER_STOP_AT_MAIN"; //$NON-NLS-1$
/**
* Launch configuration attribute key. The value is a String specifying
* the symbol to use for the main breakpoint.
*/
public static final String ATTR_DEBUGGER_STOP_AT_MAIN_SYMBOL = CDT_LAUNCH_ID + ".DEBUGGER_STOP_AT_MAIN_SYMBOL"; //$NON-NLS-1$
/** /**
* Launch configuration attribute key. The value is a String specifying * Launch configuration attribute key. The value is a String specifying
* the register groups memento. * the register groups memento.
@ -172,6 +179,12 @@ public interface ICDTLaunchConfigurationConstants {
*/ */
public static boolean DEBUGGER_STOP_AT_MAIN_DEFAULT = true; public static boolean DEBUGGER_STOP_AT_MAIN_DEFAULT = true;
/**
* Launch configuration attribute value. The key is
* DEBUGGER_STOP_AT_MAIN_SYMBOL.
*/
public static String DEBUGGER_STOP_AT_MAIN_SYMBOL_DEFAULT = "main"; //$NON-NLS-1$
/** /**
* Launch configuration attribute value. The key is * Launch configuration attribute value. The key is
* ATTR_DEBUGGER_START_MODE. Startup debugger running the program. * ATTR_DEBUGGER_START_MODE. Startup debugger running the program.

View file

@ -7,6 +7,7 @@
* *
* Contributors: * Contributors:
* QNX Software Systems - Initial API and implementation * QNX Software Systems - Initial API and implementation
* Ken Ryall (Nokia) - https://bugs.eclipse.org/bugs/show_bug.cgi?id=118894
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.debug.internal.core.model; package org.eclipse.cdt.debug.internal.core.model;
@ -25,6 +26,7 @@ import org.eclipse.cdt.debug.core.CDIDebugModel;
import org.eclipse.cdt.debug.core.CDebugCorePlugin; import org.eclipse.cdt.debug.core.CDebugCorePlugin;
import org.eclipse.cdt.debug.core.CDebugUtils; import org.eclipse.cdt.debug.core.CDebugUtils;
import org.eclipse.cdt.debug.core.DebugCoreMessages; import org.eclipse.cdt.debug.core.DebugCoreMessages;
import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
import org.eclipse.cdt.debug.core.ICDebugConstants; import org.eclipse.cdt.debug.core.ICDebugConstants;
import org.eclipse.cdt.debug.core.ICGlobalVariableManager; import org.eclipse.cdt.debug.core.ICGlobalVariableManager;
import org.eclipse.cdt.debug.core.cdi.CDIException; import org.eclipse.cdt.debug.core.cdi.CDIException;
@ -864,9 +866,16 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv
if ( !canRestart() ) { if ( !canRestart() ) {
return; return;
} }
changeState( CDebugElementState.RESTARTING ); String mainSymbol = new String( ICDTLaunchConfigurationConstants.DEBUGGER_STOP_AT_MAIN_SYMBOL_DEFAULT );
ICDILocation location = getCDITarget().createFunctionLocation( "", "main" ); //$NON-NLS-1$ //$NON-NLS-2$ try {
mainSymbol = getLaunch().getLaunchConfiguration().getAttribute( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN_SYMBOL, ICDTLaunchConfigurationConstants.DEBUGGER_STOP_AT_MAIN_SYMBOL_DEFAULT );
}
catch( CoreException e ) {
requestFailed( e.getMessage(), e );
}
ICDILocation location = getCDITarget().createFunctionLocation( "", mainSymbol ); //$NON-NLS-1$
setInternalTemporaryBreakpoint( location ); setInternalTemporaryBreakpoint( location );
changeState( CDebugElementState.RESTARTING );
try { try {
getCDITarget().restart(); getCDITarget().restart();
} }
@ -1691,11 +1700,13 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv
} }
protected void stopInMain() throws DebugException { protected void stopInMain() throws DebugException {
ICDILocation location = getCDITarget().createFunctionLocation( "", "main" ); //$NON-NLS-1$ //$NON-NLS-2$ String mainSymbol = new String( ICDTLaunchConfigurationConstants.DEBUGGER_STOP_AT_MAIN_SYMBOL_DEFAULT );
try { try {
mainSymbol = getLaunch().getLaunchConfiguration().getAttribute( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN_SYMBOL, ICDTLaunchConfigurationConstants.DEBUGGER_STOP_AT_MAIN_SYMBOL_DEFAULT );
ICDILocation location = getCDITarget().createFunctionLocation( "", mainSymbol ); //$NON-NLS-1$
setInternalTemporaryBreakpoint( location ); setInternalTemporaryBreakpoint( location );
} }
catch( DebugException e ) { catch( CoreException e ) {
String message = MessageFormat.format( DebugCoreMessages.getString( "CDebugModel.0" ), new String[]{ e.getStatus().getMessage() } ); //$NON-NLS-1$ String message = MessageFormat.format( DebugCoreMessages.getString( "CDebugModel.0" ), new String[]{ e.getStatus().getMessage() } ); //$NON-NLS-1$
IStatus newStatus = new Status( IStatus.WARNING, e.getStatus().getPlugin(), ICDebugInternalConstants.STATUS_CODE_QUESTION, message, null ); IStatus newStatus = new Status( IStatus.WARNING, e.getStatus().getPlugin(), ICDebugInternalConstants.STATUS_CODE_QUESTION, message, null );
if ( !CDebugUtils.question( newStatus, this ) ) { if ( !CDebugUtils.question( newStatus, this ) ) {

View file

@ -1,3 +1,9 @@
2006-01-29 Mikhail Khodjaiants
Bug 118894: Allow stopping at other locations other than main().
Applied patch from Ken Ryall (Nokia).
* LaunchMessages.properties
* CDebuggerTab.java
2006-01-25 Mikhail Khodjaiants 2006-01-25 Mikhail Khodjaiants
Reversing changes made to fix bug 107571. The fix for bug 119683 covers this problem too. Reversing changes made to fix bug 107571. The fix for bug 119683 covers this problem too.
Inferior process shouldn't be shown as a part of the attach session. Inferior process shouldn't be shown as a part of the attach session.

View file

@ -8,6 +8,7 @@
# Contributors: # Contributors:
# QNX Software Systems - Initial API and implementation # QNX Software Systems - Initial API and implementation
# Monta Vista - Joanne Woo - Bug 87556 # Monta Vista - Joanne Woo - Bug 87556
# Nokia - Ken Ryall - Bug 118894
############################################################################### ###############################################################################
AbstractCLaunchDelegate.Debugger_not_installed=CDT Debugger not installed AbstractCLaunchDelegate.Debugger_not_installed=CDT Debugger not installed
@ -94,8 +95,9 @@ CMainTab.UseTerminal=Connect process input && output to a terminal.
CMainTab.Program_is_not_a_recongnized_executable=Program is not a recognized executable. CMainTab.Program_is_not_a_recongnized_executable=Program is not a recognized executable.
CDebuggerTab.Advanced_Options_Dialog_Title=Advanced Options CDebuggerTab.Advanced_Options_Dialog_Title=Advanced Options
CDebuggerTab.Stop_at_main_on_startup=Stop at main() on startup CDebuggerTab.Stop_at_main_on_startup=Stop on startup at:
CDebuggerTab.Automatically_track_values_of=Automatically track the values of CDebuggerTab.Automatically_track_values_of=Automatically track the values of
CDebuggerTab.Stop_on_startup_at_can_not_be_empty=The "Stop on startup at" field can not be empty.
CDebuggerTab.Debugger_Options=Debugger Options CDebuggerTab.Debugger_Options=Debugger Options
CDebuggerTab.Mode_not_supported=Mode ''{0}'' is not supported by selected debugger CDebuggerTab.Mode_not_supported=Mode ''{0}'' is not supported by selected debugger
CDebuggerTab.Advanced=Advanced... CDebuggerTab.Advanced=Advanced...

View file

@ -7,6 +7,7 @@
* *
* Contributors: * Contributors:
* QNX Software Systems - Initial API and implementation * QNX Software Systems - Initial API and implementation
* Ken Ryall (Nokia) - https://bugs.eclipse.org/bugs/show_bug.cgi?id=118894
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.launch.ui; package org.eclipse.cdt.launch.ui;
@ -37,6 +38,8 @@ import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT; 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.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridData;
@ -46,6 +49,7 @@ import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class CDebuggerTab extends AbstractCDebuggerTab { public class CDebuggerTab extends AbstractCDebuggerTab {
@ -119,6 +123,7 @@ public class CDebuggerTab extends AbstractCDebuggerTab {
protected Button fAdvancedButton; protected Button fAdvancedButton;
protected Button fStopInMain; protected Button fStopInMain;
protected Text fStopInMainSymbol;
protected Button fAttachButton; protected Button fAttachButton;
private Map fAdvancedAttributes = new HashMap(5); private Map fAdvancedAttributes = new HashMap(5);
@ -221,8 +226,8 @@ public class CDebuggerTab extends AbstractCDebuggerTab {
ICDTLaunchConfigurationConstants.DEBUGGER_MODE_ATTACH); ICDTLaunchConfigurationConstants.DEBUGGER_MODE_ATTACH);
} else { } else {
config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN, fStopInMain.getSelection()); config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN, fStopInMain.getSelection());
config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN_SYMBOL, fStopInMainSymbol.getText());
ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN); config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN);
} }
applyAdvancedAttributes(config); applyAdvancedAttributes(config);
} }
@ -239,6 +244,11 @@ public class CDebuggerTab extends AbstractCDebuggerTab {
setErrorMessage(MessageFormat.format(LaunchMessages.getString("CDebuggerTab.Mode_not_supported"), new String[]{mode})); //$NON-NLS-1$ setErrorMessage(MessageFormat.format(LaunchMessages.getString("CDebuggerTab.Mode_not_supported"), new String[]{mode})); //$NON-NLS-1$
return false; return false;
} }
String mainSymbol = fStopInMainSymbol.getText().trim();
if (fStopInMain.getSelection() && mainSymbol.length() == 0) {
setErrorMessage( LaunchMessages.getString("CDebuggerTab.Stop_on_startup_at_can_not_be_empty")); //$NON-NLS-1$
return false;
}
if (super.isValid(config) == false) { if (super.isValid(config) == false) {
return false; return false;
} }
@ -329,7 +339,7 @@ public class CDebuggerTab extends AbstractCDebuggerTab {
protected void createOptionsComposite(Composite parent) { protected void createOptionsComposite(Composite parent) {
Composite optionsComp = new Composite(parent, SWT.NONE); Composite optionsComp = new Composite(parent, SWT.NONE);
int numberOfColumns = (fAttachMode) ? 1 : 2; int numberOfColumns = (fAttachMode) ? 1 : 3;
GridLayout layout = new GridLayout( numberOfColumns, false ); GridLayout layout = new GridLayout( numberOfColumns, false );
optionsComp.setLayout( layout ); optionsComp.setLayout( layout );
optionsComp.setLayoutData( new GridData( GridData.BEGINNING, GridData.CENTER, true, false, 1, 1 ) ); optionsComp.setLayoutData( new GridData( GridData.BEGINNING, GridData.CENTER, true, false, 1, 1 ) );
@ -338,6 +348,16 @@ public class CDebuggerTab extends AbstractCDebuggerTab {
fStopInMain.addSelectionListener(new SelectionAdapter() { fStopInMain.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) { public void widgetSelected(SelectionEvent e) {
fStopInMainSymbol.setEnabled(fStopInMain.getSelection());
update();
}
});
fStopInMainSymbol = new Text(optionsComp, SWT.SINGLE | SWT.BORDER);
final GridData gridData = new GridData(GridData.FILL, GridData.CENTER, false, false);
gridData.widthHint = 100;
fStopInMainSymbol.setLayoutData(gridData);
fStopInMainSymbol.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent evt) {
update(); update();
} }
}); });
@ -408,6 +428,9 @@ public class CDebuggerTab extends AbstractCDebuggerTab {
if (!fAttachMode) { if (!fAttachMode) {
fStopInMain.setSelection(config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN, fStopInMain.setSelection(config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN,
ICDTLaunchConfigurationConstants.DEBUGGER_STOP_AT_MAIN_DEFAULT)); ICDTLaunchConfigurationConstants.DEBUGGER_STOP_AT_MAIN_DEFAULT));
fStopInMainSymbol.setText(config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN_SYMBOL,
ICDTLaunchConfigurationConstants.DEBUGGER_STOP_AT_MAIN_SYMBOL_DEFAULT));
fStopInMainSymbol.setEnabled(fStopInMain.getSelection());
} }
initializeAdvancedAttributes(config); initializeAdvancedAttributes(config);
} catch (CoreException e) { } catch (CoreException e) {