1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-03 15:15:25 +02:00

Merge remote-tracking branch 'cdt/master' into sd90

This commit is contained in:
Andrew Gvozdev 2012-12-17 07:32:38 -05:00
commit 367eabaaa0
25 changed files with 651 additions and 89 deletions

View file

@ -51,9 +51,11 @@ import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
/*
@ -202,7 +204,7 @@ public class ManagedBuildCoreTests20 extends TestCase {
/**
* Convert path to OS specific representation
*/
private String toOSString(String path) {
private String toOSLocation(String path) {
File file = new File(path);
try {
path = file.getCanonicalPath();
@ -211,7 +213,14 @@ public class ManagedBuildCoreTests20 extends TestCase {
return path;
}
/**
* Convert path to OS specific representation
*/
private String toOSString(String path) {
return new Path(path).toOSString();
}
/**
* The purpose of this test is to exercise the build path info interface.
* To get to that point, a new project/config has to be created in the test
@ -232,21 +241,44 @@ public class ManagedBuildCoreTests20 extends TestCase {
}
//These are the expected path settings
final String[] expectedPaths = {
toOSString("/usr/include"),
toOSString("/opt/gnome/include"),
toOSString("C:\\home\\tester/include"),
// relative path makes 2 entries
project.getLocation().append("includes").toOSString(),
"includes",
"/usr/gnu/include", // This one set to ICSettingEntry.RESOLVED
};
IPath buildCWD = project.getLocation().append("Sub Config");
final String[] expectedPaths;
if (new Path("C:\\home\\tester/include").isAbsolute()) {
// Windows
expectedPaths = new String[] {
toOSLocation("/usr/include"),
toOSLocation("/opt/gnome/include"),
toOSLocation("C:\\home\\tester/include"),
// relative paths from MBS will make 3 entries
project.getLocation().append("includes").toOSString(),
buildCWD.append("includes").toOSString(),
toOSString("includes"),
"/usr/gnu/include", // Not converted to OS string due to being flagged as ICSettingEntry.RESOLVED
};
} else {
// Unix
expectedPaths = new String[] {
toOSLocation("/usr/include"),
toOSLocation("/opt/gnome/include"),
// on unix "C:\\home\\tester/include" is relative path
// looks like nonsense but has to be this way as MBS converts entry to keep "Sub Config/C:\\home\\tester/include" in its storage
project.getLocation().append("Sub Config/C:\\home\\tester/include").toOSString(),
buildCWD.append("Sub Config/C:\\home\\tester/include").toOSString(),
toOSString("Sub Config/C:\\home\\tester/include"),
// relative paths from MBS will make 3 entries
project.getLocation().append("includes").toOSString(),
buildCWD.append("includes").toOSString(),
toOSString("includes"),
"/usr/gnu/include", // Not converted to OS string due to being flagged as ICSettingEntry.RESOLVED
};
}
// Create a new managed project based on the sub project type
IProjectType projType = ManagedBuildManager.getExtensionProjectType("test.sub");
assertNotNull(projType);
// Create the managed-project (.cdtbuild) for our project
// Create the managed-project for our project
IManagedProject newProject = null;
try {
newProject = ManagedBuildManager.createManagedProject(project, projType);
@ -527,7 +559,7 @@ public class ManagedBuildCoreTests20 extends TestCase {
IProjectType projType = ManagedBuildManager.getExtensionProjectType("test.root");
assertNotNull(projType);
// Create the managed-project (.cdtbuild) for our project that builds a dummy executable
// Create the managed-project for our project that builds a dummy executable
IManagedProject newProject = ManagedBuildManager.createManagedProject(project, projType);
assertEquals(newProject.getName(), projType.getName());
assertFalse(newProject.equals(projType));

View file

@ -1841,11 +1841,10 @@ public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider
// }
if(!buildPath.isAbsolute()){
buildPath = project.getFullPath().append(buildPath);
IStringVariableManager mngr = VariablesPlugin.getDefault().getStringVariableManager();
result = buildPath.toString();
result = mngr.generateVariableExpression("workspace_loc", result); //$NON-NLS-1$
// build dir may not exist yet and non-existent paths will resolve to empty string by VariablesPlugin
// so append relative part outside of expression, i.e. ${workspace_loc:/Project}/BuildDir
result = mngr.generateVariableExpression("workspace_loc", project.getFullPath().toString()) + Path.SEPARATOR + buildPath.toString(); //$NON-NLS-1$
} else {
result = buildPath.toString();
}

View file

@ -22,11 +22,16 @@ import org.eclipse.cdt.core.settings.model.ICFileDescription;
import org.eclipse.cdt.core.settings.model.ICFolderDescription;
import org.eclipse.cdt.core.settings.model.ICLanguageSetting;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.core.settings.model.ICPathEntry;
import org.eclipse.cdt.core.settings.model.ICResourceDescription;
import org.eclipse.cdt.core.settings.model.ICSettingBase;
import org.eclipse.cdt.core.settings.model.util.CDataUtil;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.variables.IStringVariableManager;
import org.eclipse.core.variables.VariablesPlugin;
/**
* Implementation of language settings provider for CDT Managed Build System.
@ -62,6 +67,20 @@ public class MBSLanguageSettingsProvider extends AbstractExecutableExtensionBase
if ((kindsBits & kind) != 0) {
List<ICLanguageSettingEntry> additions = langSetting.getSettingEntriesList(kind);
for (ICLanguageSettingEntry entry : additions) {
if (entry instanceof ICPathEntry) {
// have to use getName() rather than getLocation() and not use IPath operations to avoid collapsing ".."
String pathStr = ((ICPathEntry) entry).getName();
if (!new Path(pathStr).isAbsolute()) {
// We need to add project-rooted entry for relative path as MBS counts it this way in some UI
// The relative entry below also should be added for indexer to resolve from source file locations
IStringVariableManager mngr = VariablesPlugin.getDefault().getStringVariableManager();
String projectRootedPath = mngr.generateVariableExpression("workspace_loc", rc.getProject().getName()) + Path.SEPARATOR + pathStr; //$NON-NLS-1$
ICLanguageSettingEntry projectRootedEntry = (ICLanguageSettingEntry) CDataUtil.createEntry(kind, projectRootedPath, projectRootedPath, null, entry.getFlags());
if (! list.contains(projectRootedEntry)) {
list.add(projectRootedEntry);
}
}
}
if (! list.contains(entry)) {
list.add(entry);
}

View file

@ -30,10 +30,10 @@ import org.eclipse.cdt.core.parser.ExtendedScannerInfo;
import org.eclipse.cdt.core.parser.IScannerInfo;
import org.eclipse.cdt.core.parser.IScannerInfoChangeListener;
import org.eclipse.cdt.core.parser.IScannerInfoProvider;
import org.eclipse.cdt.core.settings.model.ACPathEntry;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
import org.eclipse.cdt.core.settings.model.ICMacroEntry;
import org.eclipse.cdt.core.settings.model.ICPathEntry;
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.core.settings.model.ICSettingEntry;
import org.eclipse.cdt.core.settings.model.util.CDataUtil;
@ -132,17 +132,15 @@ public class LanguageSettingsScannerInfoProvider implements IScannerInfoProvider
return new ExtendedScannerInfo(definedMacros, includePaths, macroFiles, includeFiles, includePathsLocal);
}
private IPath expandVariables(IPath path, ICConfigurationDescription cfgDescription) {
ICdtVariableManager varManager = CCorePlugin.getDefault().getCdtVariableManager();
String pathStr = path.toString();
private String expandVariables(String pathStr, ICConfigurationDescription cfgDescription) {
try {
ICdtVariableManager varManager = CCorePlugin.getDefault().getCdtVariableManager();
pathStr = varManager.resolveValue(pathStr, "", null, cfgDescription); //$NON-NLS-1$
} catch (CdtVariableException e) {
} catch (Exception e) {
// Swallow exceptions but also log them
CCorePlugin.log(e);
}
IPath resolvedLoc = new Path(pathStr);
return resolvedLoc;
return pathStr;
}
/**
@ -151,7 +149,7 @@ public class LanguageSettingsScannerInfoProvider implements IScannerInfoProvider
*/
private static IPath getBuildCWD(ICConfigurationDescription cfgDescription) {
IPath buildCWD = cfgDescription.getBuildSetting().getBuilderCWD();
if (buildCWD==null) {
if (buildCWD == null) {
IProject project = cfgDescription.getProjectDescription().getProject();
buildCWD = project.getLocation();
} else {
@ -195,28 +193,44 @@ public class LanguageSettingsScannerInfoProvider implements IScannerInfoProvider
CCorePlugin.log(e);
}
// use OS file separators (i.e. '\' on Windows)
if (java.io.File.separatorChar != '/') {
location = location.replace('/', java.io.File.separatorChar);
if (java.io.File.separatorChar != IPath.SEPARATOR) {
location = location.replace(IPath.SEPARATOR, java.io.File.separatorChar);
}
// note that we avoid using org.eclipse.core.runtime.Path for manipulations being careful
// to preserve "../" segments and not let collapsing them which is not correct for symbolic links.
Path locPath = new Path(location);
if (locPath.isAbsolute() && locPath.getDevice()==null) {
// prepend device (C:) for Windows
IPath locPath = new Path(location);
if (locPath.isAbsolute() && locPath.getDevice() == null) {
IPath buildCWD = getBuildCWD(cfgDescription);
// prepend device (C:) for Windows
String device = buildCWD.getDevice();
if (device!=null)
if (device != null) {
// note that we avoid using org.eclipse.core.runtime.Path for manipulations being careful
// to preserve "../" segments and not let collapsing them which is not correct for symbolic links.
location = device + location;
}
}
if (!locPath.isAbsolute()) {
// consider relative path to be from build working directory
IPath buildCWD = getBuildCWD(cfgDescription);
location = buildCWD.toOSString() + locPath;
// again, we avoid using org.eclipse.core.runtime.Path for manipulations being careful
// to preserve "../" segments and not let collapsing them which is not correct for symbolic links.
location = buildCWD.addTrailingSeparator().toOSString() + location;
}
return location;
}
/**
* Convert path delimiters to OS representation avoiding using org.eclipse.core.runtime.Path
* being careful to preserve "../" segments and not let collapsing them which is not correct for symbolic links.
*/
private String toOSString(String loc) {
// use OS file separators (i.e. '\' on Windows)
if (java.io.File.separatorChar != IPath.SEPARATOR) {
loc = loc.replace(IPath.SEPARATOR, java.io.File.separatorChar);
}
return loc;
}
/**
* Convert the path entries to absolute file system locations represented as String array.
* Resolve the entries which are not resolved.
@ -225,10 +239,10 @@ public class LanguageSettingsScannerInfoProvider implements IScannerInfoProvider
* @param cfgDescription - configuration description for resolving entries.
* @return array of the locations.
*/
private String[] convertToLocations(LinkedHashSet<ICLanguageSettingEntry> entriesPath, ICConfigurationDescription cfgDescription){
private String[] convertToLocations(LinkedHashSet<ICLanguageSettingEntry> entriesPath, ICConfigurationDescription cfgDescription) {
List<String> locations = new ArrayList<String>(entriesPath.size());
for (ICLanguageSettingEntry entry : entriesPath) {
ACPathEntry entryPath = (ACPathEntry)entry;
ICPathEntry entryPath = (ICPathEntry)entry;
if (entryPath.isValueWorkspacePath()) {
ICLanguageSettingEntry[] entries = new ICLanguageSettingEntry[] {entry};
if (!entry.isResolved()) {
@ -236,7 +250,7 @@ public class LanguageSettingsScannerInfoProvider implements IScannerInfoProvider
}
for (ICLanguageSettingEntry resolved : entries) {
IPath loc = ((ACPathEntry) resolved).getLocation();
IPath loc = ((ICPathEntry) resolved).getLocation();
if (loc != null) {
if (checkBit(resolved.getFlags(), ICSettingEntry.FRAMEWORKS_MAC)) {
// handle frameworks, see IScannerInfo.getIncludePaths()
@ -248,24 +262,25 @@ public class LanguageSettingsScannerInfoProvider implements IScannerInfoProvider
}
}
} else {
String locStr = entryPath.getName();
// have to use getName() rather than getLocation() to avoid collapsing ".."
String loc = entryPath.getName();
if (entryPath.isResolved()) {
locations.add(locStr);
locations.add(loc);
} else {
locStr = resolveEntry(locStr, cfgDescription);
if (locStr!=null) {
loc = resolveEntry(loc, cfgDescription);
if (loc != null) {
if (checkBit(entryPath.getFlags(), ICSettingEntry.FRAMEWORKS_MAC)) {
// handle frameworks, see IScannerInfo.getIncludePaths()
locations.add(locStr+FRAMEWORK_HEADERS_INCLUDE);
locations.add(locStr+FRAMEWORK_PRIVATE_HEADERS_INCLUDE);
locations.add(toOSString(loc + FRAMEWORK_HEADERS_INCLUDE));
locations.add(toOSString(loc + FRAMEWORK_PRIVATE_HEADERS_INCLUDE));
} else {
locations.add(locStr);
// add relative paths again for indexer to resolve from source file location
IPath unresolvedPath = entryPath.getLocation();
if (!unresolvedPath.isAbsolute()) {
IPath expandedPath = expandVariables(unresolvedPath, cfgDescription);
if (!expandedPath.isAbsolute()) {
locations.add(expandedPath.toOSString());
locations.add(toOSString(loc));
String unresolvedPath = entryPath.getName();
if (!new Path(unresolvedPath).isAbsolute()) {
// add relative paths again for indexer to resolve from source file location
String expandedPath = expandVariables(unresolvedPath, cfgDescription);
if (!expandedPath.isEmpty() && !new Path(expandedPath).isAbsolute()) {
locations.add(toOSString(expandedPath));
}
}
}

View file

@ -0,0 +1,37 @@
/*******************************************************************************
* Copyright (c) 2007, 2012 Nokia and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Marc Dumais (Ericsson) - initial implementation
*******************************************************************************/
package org.eclipse.cdt.debug.core.breakpointactions;
/**
* @since 7.3
*/
public interface IReverseDebugEnabler {
/**
* Toggles the state of the reverse debugging mode.
* @throws Exception
*/
void toggle() throws Exception;
/**
* Enables the reverse debugging mode. No effect if already enabled.
* @throws Exception
*/
void enable() throws Exception;
/**
* Disables the reverse debugging mode. No effect if it's not enabled.
* @throws Exception
*/
void disable() throws Exception;
}

View file

@ -11,6 +11,7 @@
# Patrick Chuong (Texas Instruments) - Pin and Clone Supports (Bug 331781)
# Dobrin Alexiev (Texas Instruments) - initial API and implementation (bug 336876)
# Marc Khouzam (Ericsson) - Added support for connect command (Bug 365601)
# Marc Dumais (Ericsson) - Added support for reverse debug action (Bug 365776)
###############################################################################
pluginName=C/C++ Development Tools Debugger UI
@ -37,10 +38,10 @@ ShowDebuggerConsoleAction.label=Show Debugger Console
ShowDebuggerConsoleAction.tooltip=Show Debugger Console On Target Selection
AddBreakpoint.label=Toggle Brea&kpoint
AddBreakpointInteractive.label=&Add Breakpoint...\tCtrl+Double Click
EnableBreakpoint.label=&Toggle Breakpoint Enabled\tShift+Double Click
AddBreakpointInteractive.label=&Add Breakpoint...
EnableBreakpoint.label=&Toggle Breakpoint Enabled
BreakpointProperties.label=Breakpoint P&roperties...
RulerBreakpointProperties.label=Breakpoint P&roperties...\tCtrl+Double Click
RulerBreakpointProperties.label=Breakpoint P&roperties...
BreakpointPropertiesCommand.name=C/C++ Breakpoint Properties
BreakpointPropertiesCommand.description=View and edit properties for a given C/C++ breakpoint
ManageFunctionBreakpointAction.label=Toggle Breakpoint
@ -157,6 +158,7 @@ SoundAction.name=Sound Action
LogAction.name=Log Action
ResumeAction.name=Resume Action
ExternalToolAction.name=External Tool Action
ReverseDebugAction.name=Reverse Debug Action
# Breakpoint Types
breapointType.label=Type

View file

@ -1710,6 +1710,14 @@
class="org.eclipse.cdt.debug.ui.breakpointactions.ExternalToolAction"
id="org.eclipse.cdt.debug.ui.breakpointactions.ExternalToolAction"/>
</extension>
<extension
point="org.eclipse.cdt.debug.core.BreakpointActionType">
<actionType
class="org.eclipse.cdt.debug.ui.breakpointactions.ReverseDebugAction"
id="org.eclipse.cdt.debug.ui.breakpointactions.ReverseDebugAction"
name="%ReverseDebugAction.name">
</actionType>
</extension>
<extension
point="org.eclipse.cdt.debug.ui.BreakpointActionPage">
<actionPage
@ -1740,6 +1748,14 @@
id="org.eclipse.cdt.debug.ui.breakpointactions.ExternalToolActionPage"
actionType="org.eclipse.cdt.debug.ui.breakpointactions.ExternalToolAction"/>
</extension>
<extension
point="org.eclipse.cdt.debug.ui.BreakpointActionPage">
<actionPage
actionType="org.eclipse.cdt.debug.ui.breakpointactions.ReverseDebugAction"
class="org.eclipse.cdt.debug.ui.breakpointactions.ReverseDebugActionPage"
id="org.eclipse.cdt.debug.ui.breakpointactions.ReverseDebugActionPage">
</actionPage>
</extension>
<extension point="org.eclipse.debug.ui.detailPaneFactories">
<detailFactories

View file

@ -39,6 +39,7 @@ import org.eclipse.debug.core.model.IVariable;
import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.debug.ui.contexts.IDebugContextListener;
import org.eclipse.debug.ui.contexts.IDebugContextProvider;
import org.eclipse.jface.bindings.keys.KeyStroke;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
@ -338,4 +339,20 @@ public class CDebugUIUtils {
propertiesAction.run();
propertiesAction.dispose();
}
/**
* Formats the given key stroke or click name and the modifier keys
* to a key binding string that can be used in action texts.
*
* @param modifierKeys the modifier keys
* @param keyOrClick a key stroke or click, e.g. "Double Click"
* @return the formatted keyboard shortcut string, e.g. "Shift+Double Click"
*
* @since 8.1
*/
public static final String formatKeyBindingString(int modifierKeys, String keyOrClick) {
// this should actually all be delegated to KeyStroke class
return KeyStroke.getInstance(modifierKeys, KeyStroke.NO_KEY).format() + keyOrClick;
}
}

View file

@ -37,14 +37,14 @@ ToggleBreakpointAdapter.Missing_document_2=Missing document
ToggleBreakpointAdapter.Missing_resource_2=Missing resource
ToggleBreakpointAdapter.Invalid_expression_1=Invalid expression:
RunToLineAdapter.Operation_is_not_supported_1=Operation is not supported.
EnableDisableBreakpointRulerAction.Enable_Breakpoint_1=&Enable Breakpoint\tShift+Double Click
EnableDisableBreakpointRulerAction.Enable_Breakpoint_1=&Enable Breakpoint
EnableDisableBreakpointRulerAction.Enabling_disabling_breakpoints_1=Enabling/disabling breakpoints
EnableDisableBreakpointRulerAction.Exceptions_occurred_enabling_or_disabling_breakpoint_1=Exceptions occurred enabling or disabling the breakpoint
EnableDisableBreakpointRulerAction.Disable_Breakpoint_1=&Disable Breakpoint\tShift+Double Click
EnableDisableBreakpointRulerAction.Disable_Breakpoint_1=&Disable Breakpoint
ToggleWatchpointActionDelegate.Operation_failed_1=Operation failed.
ToggleBreakpointRulerAction.Error_1=Error
ToggleBreakpointRulerAction.Operation_failed_1=Operation failed
CBreakpointPropertiesRulerAction.Breakpoint_Properties=Breakpoint &Properties...\tCtrl+Double Click
CBreakpointPropertiesRulerAction.Breakpoint_Properties=Breakpoint &Properties...
CBreakpointPropertiesRulerAction.Error=Unable to edit breakpoint properties.
ResumeAtLineActionDelegate.Error_1=Error
ResumeAtLineActionDelegate.1=Error
@ -129,7 +129,8 @@ RetargetAction.0=Error
RetargetAction.1=Operation failed
RetargetMoveToLineAction.0=The operation is unavailable on the current selection. Please place the cursor on valid line to run to.
RetargetResumeAtLineAction.0=The operation is unavailable on the current selection. Please place the cursor on valid line to run to.
CAddBreakpointInteractiveRulerAction_label=&Add Breakpoint...\tCtrl+Double Click
CAddBreakpointInteractiveRulerAction_label=&Add Breakpoint...
CAddBreakpointInteractiveRulerAction_error_title=Error
CAddBreakpointInteractiveRulerAction_error_message=Unable to create breakpoint
CRulerToggleBreakpointActionDelegate_label=Toggle Brea&kpoint
CRulerToggleBreakpointAction_accelerator=Double Click

View file

@ -11,6 +11,7 @@
*******************************************************************************/
package org.eclipse.cdt.debug.internal.ui.actions.breakpoints;
import org.eclipse.cdt.debug.internal.ui.CDebugUIUtils;
import org.eclipse.cdt.debug.internal.ui.actions.ActionMessages;
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
import org.eclipse.cdt.debug.ui.breakpoints.IToggleBreakpointsTargetCExtension;
@ -30,6 +31,7 @@ import org.eclipse.jface.text.TextSelection;
import org.eclipse.jface.text.source.IVerticalRulerInfo;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.swt.SWT;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.texteditor.ITextEditor;
@ -68,7 +70,8 @@ public class CAddBreakpointInteractiveRulerAction extends Action implements IUpd
* @param rulerInfo specifies location the user has double-clicked
*/
public CAddBreakpointInteractiveRulerAction(IWorkbenchPart part, IDocument document, IVerticalRulerInfo rulerInfo) {
super(ActionMessages.getString("CAddBreakpointInteractiveRulerAction_label")); //$NON-NLS-1$
super(ActionMessages.getString("CAddBreakpointInteractiveRulerAction_label") + "\t" + //$NON-NLS-1$ //$NON-NLS-2$
CDebugUIUtils.formatKeyBindingString(SWT.MOD1, ActionMessages.getString("CRulerToggleBreakpointAction_accelerator")) ); //$NON-NLS-1$
fPart = part;
fDocument = document;
fRulerInfo = rulerInfo;

View file

@ -12,6 +12,7 @@
package org.eclipse.cdt.debug.internal.ui.actions.breakpoints;
import org.eclipse.cdt.debug.core.model.ICBreakpoint;
import org.eclipse.cdt.debug.internal.ui.CDebugUIUtils;
import org.eclipse.cdt.debug.internal.ui.ICDebugHelpContextIds;
import org.eclipse.cdt.debug.internal.ui.IInternalCDebugUIConstants;
import org.eclipse.cdt.debug.internal.ui.actions.ActionMessages;
@ -25,6 +26,7 @@ import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.ui.IWorkbenchPart;
/**
@ -40,7 +42,8 @@ public class CBreakpointPropertiesRulerAction extends AbstractBreakpointRulerAct
*/
public CBreakpointPropertiesRulerAction( IWorkbenchPart part, IVerticalRulerInfo info ) {
super( part, info );
setText( ActionMessages.getString( "CBreakpointPropertiesRulerAction.Breakpoint_Properties" ) ); //$NON-NLS-1$
setText( ActionMessages.getString( "CBreakpointPropertiesRulerAction.Breakpoint_Properties" ) + "\t" + //$NON-NLS-1$ //$NON-NLS-2$
CDebugUIUtils.formatKeyBindingString(SWT.MOD1, ActionMessages.getString("CRulerToggleBreakpointAction_accelerator")) ); //$NON-NLS-1$
part.getSite().getWorkbenchWindow().getWorkbench().getHelpSystem().setHelp( this, ICDebugHelpContextIds.BREAKPOINT_PROPERTIES_ACTION );
setId( IInternalCDebugUIConstants.ACTION_BREAKPOINT_PROPERTIES );
}

View file

@ -11,6 +11,7 @@
*******************************************************************************/
package org.eclipse.cdt.debug.internal.ui.actions.breakpoints;
import org.eclipse.cdt.debug.internal.ui.CDebugUIUtils;
import org.eclipse.cdt.debug.internal.ui.ICDebugHelpContextIds;
import org.eclipse.cdt.debug.internal.ui.IInternalCDebugUIConstants;
import org.eclipse.cdt.debug.internal.ui.actions.ActionMessages;
@ -19,6 +20,7 @@ import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.model.IBreakpoint;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.text.source.IVerticalRulerInfo;
import org.eclipse.swt.SWT;
import org.eclipse.ui.IWorkbenchPart;
public class EnableDisableBreakpointRulerAction extends AbstractBreakpointRulerAction {
@ -30,7 +32,8 @@ public class EnableDisableBreakpointRulerAction extends AbstractBreakpointRulerA
*/
public EnableDisableBreakpointRulerAction( IWorkbenchPart part, IVerticalRulerInfo info ) {
super( part, info );
setText( ActionMessages.getString( "EnableDisableBreakpointRulerAction.Enable_Breakpoint_1" ) ); //$NON-NLS-1$
setText( ActionMessages.getString( "EnableDisableBreakpointRulerAction.Enable_Breakpoint_1" ) + "\t" + //$NON-NLS-1$ //$NON-NLS-2$
CDebugUIUtils.formatKeyBindingString(SWT.MOD2, ActionMessages.getString("CRulerToggleBreakpointAction_accelerator")) ); //$NON-NLS-1$
part.getSite().getWorkbenchWindow().getWorkbench().getHelpSystem().setHelp( this, ICDebugHelpContextIds.ENABLE_DISABLE_BREAKPOINT_ACTION );
setId( IInternalCDebugUIConstants.ACTION_ENABLE_DISABLE_BREAKPOINT );
}
@ -61,8 +64,13 @@ public class EnableDisableBreakpointRulerAction extends AbstractBreakpointRulerA
setEnabled( fBreakpoint != null );
if ( isEnabled() ) {
try {
boolean enabled = getBreakpoint().isEnabled();
setText( enabled ? ActionMessages.getString( "EnableDisableBreakpointRulerAction.Disable_Breakpoint_1" ) : ActionMessages.getString( "EnableDisableBreakpointRulerAction.Enable_Breakpoint_1" ) ); //$NON-NLS-1$ //$NON-NLS-2$
if (getBreakpoint().isEnabled()) {
setText( ActionMessages.getString("EnableDisableBreakpointRulerAction.Disable_Breakpoint_1") + "\t" + //$NON-NLS-1$ //$NON-NLS-2$
CDebugUIUtils.formatKeyBindingString(SWT.MOD2, ActionMessages.getString("CRulerToggleBreakpointAction_accelerator")) ); //$NON-NLS-1$
} else {
setText( ActionMessages.getString("EnableDisableBreakpointRulerAction.Enable_Breakpoint_1") + "\t" + //$NON-NLS-1$ //$NON-NLS-2$
CDebugUIUtils.formatKeyBindingString(SWT.MOD2, ActionMessages.getString("CRulerToggleBreakpointAction_accelerator")) ); //$NON-NLS-1$
}
}
catch( CoreException e ) {
DebugPlugin.log( e );

View file

@ -0,0 +1,193 @@
/*******************************************************************************
* Copyright (c) 2007, 2012 Nokia and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Ericsson - initial implementation
*******************************************************************************/
package org.eclipse.cdt.debug.ui.breakpointactions;
import java.io.ByteArrayOutputStream;
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.eclipse.cdt.debug.core.CDIDebugModel;
import org.eclipse.cdt.debug.core.breakpointactions.AbstractBreakpointAction;
import org.eclipse.cdt.debug.core.breakpointactions.IReverseDebugEnabler;
import org.eclipse.cdt.debug.internal.core.ICDebugInternalConstants;
import org.eclipse.cdt.debug.internal.ui.IInternalCDebugUIConstants;
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.debug.core.model.IBreakpoint;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.InputSource;
import org.xml.sax.helpers.DefaultHandler;
/**
* Implements the reverse debug breakpoint action
*
*@since 7.3
*/
public class ReverseDebugAction extends AbstractBreakpointAction{
/**
* The available reverse debug action modes: enable, disable and toggle.
*/
public static enum REVERSE_DEBUG_ACTIONS_ENUM {
ENABLE, DISABLE, TOGGLE;
/**
* @param index
* @return the enum value for the given index
*/
public static REVERSE_DEBUG_ACTIONS_ENUM getValue(int index) {
return REVERSE_DEBUG_ACTIONS_ENUM.values()[index];
}
};
private REVERSE_DEBUG_ACTIONS_ENUM fOperation;
/**
* @return the currently configured reverse debug mode, for this BP action
*/
public REVERSE_DEBUG_ACTIONS_ENUM getOperation() {
return fOperation;
}
/**
* Sets the currently configured reverse debug mode, for this BP action
* @param operation
*/
public void setOperation(REVERSE_DEBUG_ACTIONS_ENUM operation) {
this.fOperation = operation;
}
@Override
public IStatus execute(IBreakpoint breakpoint, IAdaptable context, IProgressMonitor monitor) {
IStatus errorStatus = null;
IReverseDebugEnabler enabler = (IReverseDebugEnabler) context.getAdapter(IReverseDebugEnabler.class);
if (enabler != null) {
try {
switch (fOperation) {
case TOGGLE:
enabler.toggle();
break;
case ENABLE:
enabler.enable();
break;
case DISABLE:
enabler.disable();
break;
}
} catch (Exception e) {
errorStatus = new Status( IStatus.ERROR, CDIDebugModel.getPluginIdentifier(), ICDebugInternalConstants.STATUS_CODE_ERROR, e.getMessage(), e );
}
}
else
errorStatus = new Status( IStatus.ERROR, CDebugUIPlugin.getUniqueIdentifier(), IInternalCDebugUIConstants.INTERNAL_ERROR, Messages.getString("ReverseDebugAction.error.0"), null ); //$NON-NLS-1$
if (errorStatus != null) {
MultiStatus ms = new MultiStatus( CDIDebugModel.getPluginIdentifier(), ICDebugInternalConstants.STATUS_CODE_ERROR, Messages.getString("ReverseDebugAction.error.1"), null ); //$NON-NLS-1$
ms.add( errorStatus);
errorStatus = ms;
} else {
errorStatus = monitor.isCanceled() ? Status.CANCEL_STATUS : Status.OK_STATUS;
}
return errorStatus;
}
@Override
public String getMemento() {
String reverseDebugData = ""; //$NON-NLS-1$
DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = null;
try {
docBuilder = dfactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
Element rootElement = doc.createElement("reverseDebugData"); //$NON-NLS-1$
rootElement.setAttribute("operation", fOperation.toString()); //$NON-NLS-1$
doc.appendChild(rootElement);
ByteArrayOutputStream s = new ByteArrayOutputStream();
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
transformer.setOutputProperty(OutputKeys.METHOD, "xml"); //$NON-NLS-1$
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$
DOMSource source = new DOMSource(doc);
StreamResult outputTarget = new StreamResult(s);
transformer.transform(source, outputTarget);
reverseDebugData = s.toString("UTF8"); //$NON-NLS-1$
} catch (Exception e) {
e.printStackTrace();
}
return reverseDebugData;
}
@Override
public void initializeFromMemento(String data) {
Element root = null;
DocumentBuilder parser;
try {
parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
parser.setErrorHandler(new DefaultHandler());
root = parser.parse(new InputSource(new StringReader(data))).getDocumentElement();
String value = root.getAttribute("operation"); //$NON-NLS-1$
if (value == null)
throw new Exception();
fOperation = REVERSE_DEBUG_ACTIONS_ENUM.valueOf(value);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public String getDefaultName() {
return Messages.getString("ReverseDebugAction.UntitledName"); //$NON-NLS-1$
}
@Override
public String getSummary() {
// get translated operation
String operation = Messages.getString("ReverseDebugAction."+fOperation.toString().toLowerCase()); //$NON-NLS-1$
return operation + " " + Messages.getString("ReverseDebugAction.Summary"); //$NON-NLS-1$ //$NON-NLS-2$
}
@Override
public String getTypeName() {
return Messages.getString("ReverseDebugAction.TypeName"); //$NON-NLS-1$
}
@Override
public String getIdentifier() {
return "org.eclipse.cdt.debug.ui.breakpointactions.ReverseDebugAction"; //$NON-NLS-1$
}
}

View file

@ -0,0 +1,58 @@
/*******************************************************************************
* Copyright (c) 2007, 2012 Nokia and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Ericsson - initial implementation
*******************************************************************************/
package org.eclipse.cdt.debug.ui.breakpointactions;
import org.eclipse.cdt.debug.ui.breakpointactions.ReverseDebugAction.REVERSE_DEBUG_ACTIONS_ENUM;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
/**
* @since 7.3
*/
public class ReverseDebugActionComposite extends Composite {
private Combo combo;
public ReverseDebugActionComposite(Composite parent, int style, ReverseDebugActionPage page) {
super(parent, style);
final GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 3;
setLayout(gridLayout);
final Label reverseDebugActionLabel = new Label(this, SWT.NONE);
reverseDebugActionLabel.setText(Messages.getString("ReverseDebugActionComposite.label")); //$NON-NLS-1$
// combo widget that lets the user select which reverse debug action to set
combo = new Combo(this, SWT.READ_ONLY);
combo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
// add the available reverse debug actions to the combo drop-down list
for(REVERSE_DEBUG_ACTIONS_ENUM elem : REVERSE_DEBUG_ACTIONS_ENUM.values()) {
String option = elem.toString().toLowerCase();
combo.add(Messages.getString("ReverseDebugAction."+option)); //$NON-NLS-1$
}
combo.select(0);
}
/**
* @return The currently selected reverse debug action
*/
public REVERSE_DEBUG_ACTIONS_ENUM getOperation() {
int index = combo.getSelectionIndex();
return REVERSE_DEBUG_ACTIONS_ENUM.getValue(index);
}
}

View file

@ -0,0 +1,42 @@
/*******************************************************************************
* Copyright (c) 2007, 2012 Nokia and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Ericsson - initial implementation
*******************************************************************************/
package org.eclipse.cdt.debug.ui.breakpointactions;
import org.eclipse.cdt.debug.core.breakpointactions.IBreakpointAction;
import org.eclipse.core.runtime.PlatformObject;
import org.eclipse.swt.widgets.Composite;
/**
*@since 7.3
*/
public class ReverseDebugActionPage extends PlatformObject implements IBreakpointActionPage{
private ReverseDebugActionComposite reverseDebugActionComposite;
private ReverseDebugAction reverseDebugAction;
@Override
public void actionDialogCanceled() {
}
@Override
public void actionDialogOK() {
reverseDebugAction.setOperation(reverseDebugActionComposite.getOperation());
}
@Override
public Composite createComposite(IBreakpointAction action,
Composite composite, int style) {
reverseDebugAction = (ReverseDebugAction) action;
reverseDebugActionComposite = new ReverseDebugActionComposite(composite, style, this);
return reverseDebugActionComposite;
}
}

View file

@ -1,5 +1,5 @@
###############################################################################
# Copyright (c) 2005, 2007 Nokia
# Copyright (c) 2005, 2012 Nokia
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
@ -60,3 +60,13 @@ ResumeActionComposite.Seconds=seconds
ResumeAction.TypeName=Resume Action
ResumeAction.error.0=IResumeActionEnabler not registered in context.
ResumeAction.error.1=Could not resume.
ReverseDebugAction.UntitledName=Untitled Rev Debug Action
ReverseDebugAction.TypeName=Rev Debug Action
ReverseDebugActionComposite.label=Select Reverse Debugging Action
ReverseDebugAction.Summary= reverse debugging
ReverseDebugAction.error.0=IReverseToggleEnabler not registered in context.
ReverseDebugAction.error.1=Could not do reverse debug operation
ReverseDebugAction.enable=Enable
ReverseDebugAction.disable=Disable
ReverseDebugAction.toggle=Toggle

View file

@ -225,20 +225,20 @@ public class GDBBreakpoints_7_2 extends GDBBreakpoints_7_0
contextBreakpoints.put(reference, newBreakpoint);
// Format the return value
MIBreakpointDMContext dmc = new MIBreakpointDMContext(GDBBreakpoints_7_2.this, new IDMContext[] { context }, reference);
drm.setData(dmc);
MIBreakpointDMContext dmc = new MIBreakpointDMContext(GDBBreakpoints_7_2.this, new IDMContext[] { context }, reference);
drm.setData(dmc);
// Flag the event
getSession().dispatchEvent(new BreakpointAddedEvent(dmc), getProperties());
// Flag the event
getSession().dispatchEvent(new BreakpointAddedEvent(dmc), getProperties());
// Tracepoints are created with no passcount (passcount are not
// the same thing as ignore-count, which is not supported by
// tracepoints). We have to set the passcount manually now.
// Same for commands.
Map<String,Object> delta = new HashMap<String,Object>();
delta.put(MIBreakpoints.PASS_COUNT, getProperty(attributes, MIBreakpoints.PASS_COUNT, 0));
delta.put(MIBreakpoints.COMMANDS, getProperty(attributes, MIBreakpoints.COMMANDS, "")); //$NON-NLS-1$
modifyBreakpoint(dmc, delta, drm, false);
// Tracepoints are created with no passcount (passcount are not
// the same thing as ignore-count, which is not supported by
// tracepoints). We have to set the passcount manually now.
// Same for commands.
Map<String,Object> delta = new HashMap<String,Object>();
delta.put(MIBreakpoints.PASS_COUNT, getProperty(attributes, MIBreakpoints.PASS_COUNT, 0));
delta.put(MIBreakpoints.COMMANDS, getProperty(attributes, MIBreakpoints.COMMANDS, "")); //$NON-NLS-1$
modifyBreakpoint(dmc, delta, drm, false);
}
@Override

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2008, 2010 Ericsson and others.
* Copyright (c) 2008, 2012 Ericsson and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -7,12 +7,14 @@
*
* Contributors:
* Ericsson - Initial API and implementation
* Marc Dumais (Ericsson) - Added support for reverse debug action (Bug 365776)
*******************************************************************************/
package org.eclipse.cdt.dsf.mi.service.breakpoint.actions;
import org.eclipse.cdt.debug.core.breakpointactions.ILogActionEnabler;
import org.eclipse.cdt.debug.core.breakpointactions.IResumeActionEnabler;
import org.eclipse.cdt.debug.core.breakpointactions.IReverseDebugEnabler;
import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
import org.eclipse.cdt.dsf.datamodel.IDMContext;
import org.eclipse.cdt.dsf.service.DsfServicesTracker;
@ -42,6 +44,9 @@ public class BreakpointActionAdapter implements IAdaptable {
if (adapter.equals(IResumeActionEnabler.class)) {
return new MIResumeActionEnabler(fExecutor, fServiceTracker, fContext);
}
if (adapter.equals(IReverseDebugEnabler.class)) {
return new MIReverseDebugEnabler(fExecutor, fServiceTracker, fContext);
}
return null;
}

View file

@ -0,0 +1,89 @@
/*******************************************************************************
* Copyright (c) 2012 Ericsson and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Marc Dumais (Ericsson) - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.dsf.mi.service.breakpoint.actions;
import org.eclipse.cdt.debug.core.breakpointactions.IReverseDebugEnabler;
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
import org.eclipse.cdt.dsf.concurrent.DsfRunnable;
import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
import org.eclipse.cdt.dsf.datamodel.DMContexts;
import org.eclipse.cdt.dsf.datamodel.IDMContext;
import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService.ICommandControlDMContext;
import org.eclipse.cdt.dsf.gdb.service.IReverseRunControl;
import org.eclipse.cdt.dsf.service.DsfServicesTracker;
/**
*
* This class permits to enable, disable or toggle the reverse
* debugging mode.
*
* @since 4.2
*/
public class MIReverseDebugEnabler implements IReverseDebugEnabler {
private final DsfExecutor fExecutor;
private final DsfServicesTracker fServiceTracker;
private final ICommandControlDMContext fContext;
private static enum REVERSE_DEBUG_MODE {ENABLE, DISABLE, TOGGLE};
/**
* @param executor
* @param serviceTracker
* @param context
*/
public MIReverseDebugEnabler(DsfExecutor executor, DsfServicesTracker serviceTracker, IDMContext context) {
fExecutor = executor;
fServiceTracker = serviceTracker;
fContext = DMContexts.getAncestorOfType(context, ICommandControlDMContext.class);
assert fContext != null;
}
@Override
public void enable() throws Exception {
setMode(REVERSE_DEBUG_MODE.ENABLE);
}
@Override
public void disable() throws Exception {
setMode(REVERSE_DEBUG_MODE.DISABLE);
}
@Override
public void toggle() throws Exception {
setMode(REVERSE_DEBUG_MODE.TOGGLE);
}
private void setMode(final REVERSE_DEBUG_MODE mode) throws Exception {
fExecutor.execute(new DsfRunnable() {
@Override
public void run() {
final IReverseRunControl runControl = fServiceTracker.getService(IReverseRunControl.class);
if (runControl != null) {
runControl.isReverseModeEnabled(fContext, new DataRequestMonitor<Boolean>(fExecutor, null) {
@Override
public void handleSuccess() {
Boolean enabled = getData();
if ( (enabled.equals(false) && mode.equals(REVERSE_DEBUG_MODE.ENABLE) ) ||
(enabled.equals(true) && mode.equals(REVERSE_DEBUG_MODE.DISABLE) ) ||
(mode.equals(REVERSE_DEBUG_MODE.TOGGLE)) )
{
runControl.enableReverseMode(fContext, !enabled, new RequestMonitor(fExecutor, null));
}
}
});
}
}
});
}
}

View file

@ -31,9 +31,9 @@ commandContext.name= In Disassembly
commandContext.description= When debugging in assembly mode
# actions
action.breakpointProperties.label = Breakpoint Properties...\Ctrl+Double Click
action.toggleBreakpoint.label = Toggle Breakpoint\tDouble Click
action.addBreakpoint.label = Add Breakpoint...\tCtrl+Double Click
action.breakpointProperties.label = Breakpoint Properties...
action.toggleBreakpoint.label = Toggle Breakpoint
action.addBreakpoint.label = Add Breakpoint...
menu.updatePolicy = Update Policy
menu.threadsUpdatePolicy = Threads Update Policy

View file

@ -83,9 +83,11 @@ public final class DisassemblyMessages extends NLS {
public static String Disassembly_Error_Dialog_title;
public static String Disassembly_Error_Dialog_ok_button;
public static String DisassemblyBackendDsf_error_UnableToRetrieveData;
public static String Disassembly_action_AddBreakpoint_label;
public static String Disassembly_action_AddBreakpoint_label;
public static String Disassembly_action_AddBreakpoint_errorTitle;
public static String Disassembly_action_AddBreakpoint_errorMessage;
public static String Disassembly_action_ToggleBreakpoint_accelerator;
static {
NLS.initializeMessages(DisassemblyMessages.class.getName(), DisassemblyMessages.class);

View file

@ -18,14 +18,15 @@ Disassembly_action_GotoPC_tooltip=Go to Current Program Counter
Disassembly_action_GotoAddress_label=Go to Address...
Disassembly_action_Copy_label=&Copy
Disassembly_action_SelectAll_label=Select &All
Disassembly_action_BreakpointProperties_label=Breakpoint Properties...\tCtrl+Double Click
Disassembly_action_DisableBreakpoint_label=Disable Breakpoint\tShift+Double Click
Disassembly_action_EnableBreakpoint_label=Enable Breakpoint\tShift+Double Click
Disassembly_action_BreakpointProperties_label=Breakpoint Properties...
Disassembly_action_ToggleBreakpoint_accelerator=Double Click
Disassembly_action_EnableBreakpoint_label=Enable Breakpoint
Disassembly_action_DisableBreakpoint_label=Disable Breakpoint
Disassembly_action_RefreshView_label=Re&fresh View
Disassembly_action_OpenPreferences_label=&Preferences...
Disassembly_action_Sync_label=Link with Active Debug Context
Disassembly_action_TrackExpression_label=Track Expression
Disassembly_action_AddBreakpoint_label=Add Breakpoint...\tCtrl+Double Click
Disassembly_action_AddBreakpoint_label=Add Breakpoint...
Disassembly_action_AddBreakpoint_errorTitle=Error
Disassembly_action_AddBreakpoint_errorMessage=Unable to create breakpoint

View file

@ -31,6 +31,7 @@ import java.util.Map;
import org.eclipse.cdt.core.IAddress;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.debug.internal.ui.CDebugUIUtils;
import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.AbstractDisassemblyBackend;
import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.AddressRangePosition;
import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.DisassemblyPosition;
@ -414,7 +415,8 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
private IBreakpoint fBreakpoint;
public ActionToggleBreakpointEnablement() {
super(DisassemblyPart.this);
setText(DisassemblyMessages.Disassembly_action_EnableBreakpoint_label);
setText(DisassemblyMessages.Disassembly_action_EnableBreakpoint_label + "\t" + //$NON-NLS-1$
CDebugUIUtils.formatKeyBindingString(SWT.MOD2, DisassemblyMessages.Disassembly_action_ToggleBreakpoint_accelerator));
}
@Override
public void run() {
@ -436,9 +438,11 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
fBreakpoint = bps[0];
try {
if (fBreakpoint.isEnabled()) {
setText(DisassemblyMessages.Disassembly_action_DisableBreakpoint_label);
setText(DisassemblyMessages.Disassembly_action_DisableBreakpoint_label + "\t" + //$NON-NLS-1$
CDebugUIUtils.formatKeyBindingString(SWT.MOD2, DisassemblyMessages.Disassembly_action_ToggleBreakpoint_accelerator));
} else {
setText(DisassemblyMessages.Disassembly_action_EnableBreakpoint_label);
setText(DisassemblyMessages.Disassembly_action_EnableBreakpoint_label + "\t" + //$NON-NLS-1$
CDebugUIUtils.formatKeyBindingString(SWT.MOD2, DisassemblyMessages.Disassembly_action_ToggleBreakpoint_accelerator));
}
} catch (CoreException e) {
setEnabled(false);

View file

@ -10,6 +10,7 @@
*******************************************************************************/
package org.eclipse.cdt.dsf.debug.internal.ui.disassembly.actions;
import org.eclipse.cdt.debug.internal.ui.CDebugUIUtils;
import org.eclipse.cdt.debug.internal.ui.actions.ActionMessages;
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
import org.eclipse.cdt.debug.ui.breakpoints.IToggleBreakpointsTargetCExtension;
@ -31,6 +32,7 @@ import org.eclipse.jface.text.source.IVerticalRulerInfo;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.ui.IWorkbenchPart;
/**
@ -41,7 +43,8 @@ public class AddBreakpointRulerAction extends AbstractDisassemblyBreakpointRuler
protected AddBreakpointRulerAction(IDisassemblyPart disassemblyPart, IVerticalRulerInfo rulerInfo) {
super(disassemblyPart, rulerInfo);
setText(DisassemblyMessages.Disassembly_action_AddBreakpoint_label);
setText(DisassemblyMessages.Disassembly_action_AddBreakpoint_label + "\t" + //$NON-NLS-1$
CDebugUIUtils.formatKeyBindingString(SWT.MOD1, DisassemblyMessages.Disassembly_action_ToggleBreakpoint_accelerator));
}
/*

View file

@ -11,6 +11,7 @@
package org.eclipse.cdt.dsf.debug.internal.ui.disassembly.actions;
import org.eclipse.cdt.debug.core.model.ICBreakpoint;
import org.eclipse.cdt.debug.internal.ui.CDebugUIUtils;
import org.eclipse.cdt.debug.ui.breakpoints.CBreakpointPropertyDialogAction;
import org.eclipse.cdt.dsf.debug.internal.ui.disassembly.DisassemblyMessages;
import org.eclipse.cdt.dsf.debug.internal.ui.disassembly.provisional.IDisassemblyPart;
@ -23,6 +24,7 @@ import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.ui.IWorkbenchPart;
/**
@ -35,7 +37,8 @@ public class BreakpointPropertiesRulerAction extends AbstractDisassemblyBreakpoi
protected BreakpointPropertiesRulerAction(IDisassemblyPart disassemblyPart, IVerticalRulerInfo rulerInfo) {
super(disassemblyPart, rulerInfo);
setText(DisassemblyMessages.Disassembly_action_BreakpointProperties_label);
setText(DisassemblyMessages.Disassembly_action_BreakpointProperties_label + "\t" + //$NON-NLS-1$
CDebugUIUtils.formatKeyBindingString(SWT.MOD1, DisassemblyMessages.Disassembly_action_ToggleBreakpoint_accelerator));
}
/*