1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-07 00:05:53 +02:00

Bug 79371: Setting breakpoints in the left hand side ruler of the disassembly view is sluggish. Asynchronous breakpoint handling.

This commit is contained in:
Mikhail Khodjaiants 2005-07-08 18:06:02 +00:00
parent c299e7df97
commit 690d999a7c
6 changed files with 630 additions and 569 deletions

View file

@ -1,3 +1,10 @@
2005-07-08 Mikhail Khodjaiants
Bug 79371: Setting breakpoints in the left hand side ruler of the disassembly view is sluggish.
Asynchronous breakpoint handling.
* CBreakpointManager.java
* InternalDebugCoreMessages.properties
* CDebugTarget.java
2005-07-04 Mikhail Khodjaiants
Removed the "IBreakpointTarget" interface.
- IBreakpointTarget.java

View file

@ -8,10 +8,6 @@
# Contributors:
# QNX Software Systems - initial API and implementation
###############################################################################
CBreakpointManager.0=Set breakpoint failed. Reason: {0}.
CBreakpointManager.1=Set breakpoint failed. Reason: {0}.
CBreakpointManager.2=Set breakpoint failed. Reason: {0}.
CBreakpointManager.4=Change breakpoint properties failed. Reason: {0}.
CGlobalVariableManager.0=Invalid global variables data.
CMemoryBlockRetrievalExtension.0=Expression ''{0}'' evaluated to invalid address value: {1}.
CMemoryBlockRetrievalExtension.1=Invalid expression type: ''{0}''

View file

@ -12,7 +12,6 @@ package org.eclipse.cdt.debug.internal.core.model;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
@ -60,7 +59,6 @@ import org.eclipse.cdt.debug.core.cdi.model.ICDITargetConfiguration;
import org.eclipse.cdt.debug.core.cdi.model.ICDIThread;
import org.eclipse.cdt.debug.core.cdi.model.ICDIVariableDescriptor;
import org.eclipse.cdt.debug.core.model.CDebugElementState;
import org.eclipse.cdt.debug.core.model.ICAddressBreakpoint;
import org.eclipse.cdt.debug.core.model.ICBreakpoint;
import org.eclipse.cdt.debug.core.model.ICDebugElement;
import org.eclipse.cdt.debug.core.model.ICDebugElementStatus;
@ -87,7 +85,6 @@ import org.eclipse.cdt.debug.internal.core.ICDebugInternalConstants;
import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLookupParticipant;
import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceManager;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarkerDelta;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResourceChangeListener;
@ -103,7 +100,6 @@ import org.eclipse.core.runtime.Preferences.IPropertyChangeListener;
import org.eclipse.debug.core.DebugEvent;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.IBreakpointManager;
import org.eclipse.debug.core.IExpressionListener;
import org.eclipse.debug.core.IExpressionManager;
import org.eclipse.debug.core.ILaunch;
@ -265,8 +261,8 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv
}
private void initializeBreakpoints() {
DebugPlugin.getDefault().getBreakpointManager().addBreakpointListener( this );
setBreakpoints();
getBreakpointManager().initialize();
getBreakpointManager().setBreakpoints();
}
/**
@ -299,27 +295,6 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv
}
}
/**
* Installs all C/C++ breakpoints that currently exist in the breakpoint manager.
*/
public void setBreakpoints() {
IBreakpointManager manager = DebugPlugin.getDefault().getBreakpointManager();
IBreakpoint[] bps = manager.getBreakpoints( CDIDebugModel.getPluginIdentifier() );
for( int i = 0; i < bps.length; i++ ) {
if ( bps[i] instanceof ICBreakpoint && getBreakpointManager().isTargetBreakpoint( (ICBreakpoint)bps[i] ) && !getBreakpointManager().isCDIRegistered( (ICBreakpoint)bps[i] ) ) {
if ( bps[i] instanceof ICAddressBreakpoint ) {
// disable address breakpoints to prevent the debugger to insert them prematurely
try {
bps[i].setEnabled( false );
}
catch( CoreException e ) {
}
}
breakpointAdded0( bps[i] );
}
}
}
protected void initializeRegisters() {
getRegisterManager().initialize();
}
@ -421,7 +396,7 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv
public boolean supportsBreakpoint( IBreakpoint breakpoint ) {
if ( !getConfiguration().supportsBreakpoints() )
return false;
return (breakpoint instanceof ICBreakpoint && getBreakpointManager().isCDIRegistered( (ICBreakpoint)breakpoint ));
return (breakpoint instanceof ICBreakpoint && getBreakpointManager().supportsBreakpoint( (ICBreakpoint)breakpoint ));
}
/* (non-Javadoc)
@ -626,74 +601,18 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv
* @see org.eclipse.debug.core.IBreakpointListener#breakpointAdded(org.eclipse.debug.core.model.IBreakpoint)
*/
public void breakpointAdded( IBreakpoint breakpoint ) {
if ( !(breakpoint instanceof ICBreakpoint) || !isAvailable() || !getBreakpointManager().isTargetBreakpoint( (ICBreakpoint)breakpoint ) )
return;
breakpointAdded0( breakpoint );
}
private void breakpointAdded0( IBreakpoint breakpoint ) {
if ( !isAvailable() )
return;
if ( breakpoint instanceof ICAddressBreakpoint && !getBreakpointManager().supportsAddressBreakpoint( (ICAddressBreakpoint)breakpoint ) )
return;
if ( getConfiguration().supportsBreakpoints() ) {
try {
getBreakpointManager().setBreakpoint( (ICBreakpoint)breakpoint );
}
catch( DebugException e ) {
}
}
}
/* (non-Javadoc)
* @see org.eclipse.debug.core.IBreakpointListener#breakpointRemoved(org.eclipse.debug.core.model.IBreakpoint, org.eclipse.core.resources.IMarkerDelta)
*/
public void breakpointRemoved( IBreakpoint breakpoint, IMarkerDelta delta ) {
if ( !(breakpoint instanceof ICBreakpoint) || !isAvailable() || !getBreakpointManager().isCDIRegistered( (ICBreakpoint)breakpoint ) )
return;
try {
getBreakpointManager().removeBreakpoint( (ICBreakpoint)breakpoint );
}
catch( DebugException e ) {
}
}
/* (non-Javadoc)
* @see org.eclipse.debug.core.IBreakpointListener#breakpointChanged(org.eclipse.debug.core.model.IBreakpoint, org.eclipse.core.resources.IMarkerDelta)
*/
public void breakpointChanged( IBreakpoint breakpoint, IMarkerDelta delta ) {
if ( !(breakpoint instanceof ICBreakpoint) || !isAvailable() )
return;
ICBreakpoint b = (ICBreakpoint)breakpoint;
boolean install = false;
try {
ICDebugTarget[] tfs = b.getTargetFilters();
install = Arrays.asList( tfs ).contains( this );
}
catch( CoreException e ) {
}
boolean registered = getBreakpointManager().isCDIRegistered( b );
if ( registered && !install ) {
try {
getBreakpointManager().removeBreakpoint( b );
}
catch( DebugException e ) {
}
}
if ( !registered && install ) {
try {
getBreakpointManager().setBreakpoint( b );
}
catch( DebugException e ) {
}
}
// if ( delta != null ) {
try {
getBreakpointManager().changeBreakpointProperties( b, delta );
}
catch( DebugException e ) {
}
// }
}
/**
@ -986,7 +905,6 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv
resetStatus();
removeAllThreads();
getCDISession().getEventManager().removeEventListener( this );
DebugPlugin.getDefault().getBreakpointManager().removeBreakpointListener( this );
DebugPlugin.getDefault().getExpressionManager().removeExpressionListener( this );
DebugPlugin.getDefault().getLaunchManager().removeLaunchListener( this );
saveGlobalVariables();
@ -1133,16 +1051,8 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv
}
private void handleWatchpointScope( ICDIWatchpointScope ws ) {
ICBreakpoint watchpoint = getBreakpointManager().getBreakpoint( ws.getWatchpoint() );
if ( watchpoint != null ) {
try {
getBreakpointManager().removeBreakpoint( watchpoint );
}
catch( DebugException e ) {
CDebugCorePlugin.log( e );
}
fireSuspendEvent( DebugEvent.BREAKPOINT );
}
getBreakpointManager().watchpointOutOfScope( ws.getWatchpoint() );
fireSuspendEvent( DebugEvent.BREAKPOINT );
}
private void handleSuspendedBySignal( ICDISignalReceived signal ) {
@ -1481,16 +1391,6 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv
getMemoryBlockRetrieval().dispose();
}
public IFile getCurrentBreakpointFile() {
Object info = getCurrentStateInfo();
if ( info instanceof ICDIBreakpointHit ) {
ICDIBreakpoint cdiBreakpoint = ((ICDIBreakpointHit)info).getBreakpoint();
if ( cdiBreakpoint != null )
return getBreakpointManager().getCDIBreakpointFile( cdiBreakpoint );
}
return null;
}
protected CBreakpointManager getBreakpointManager() {
return fBreakpointManager;
}

View file

@ -1,3 +1,8 @@
2005-07-08 Mikhail Khodjaiants
Bug 79371: Setting breakpoints in the left hand side ruler of the disassembly view is sluggish.
Asynchronous breakpoint handling.
* DisassemblyEditorInput.java
2005-07-04 Mikhail Khodjaiants
Removed the "IBreakpointTarget" interface.
* DisassemblyEditorInput.java

View file

@ -153,7 +153,7 @@ public class DisassemblyEditorInput implements IEditorInput {
if ( target != null ) {
try {
IAddress address = target.getBreakpointAddress( breakpoint );
if ( ! address.isZero() )
if ( address != null && !address.isZero() )
return getInstructionLine( address );
}
catch( DebugException e ) {
@ -332,7 +332,8 @@ public class DisassemblyEditorInput implements IEditorInput {
if ( bps[i] instanceof ICLineBreakpoint ) {
ICLineBreakpoint b = (ICLineBreakpoint)bps[i];
try {
if ( address.compareTo(bt.getBreakpointAddress( b )) == 0)
IAddress a = bt.getBreakpointAddress( b );
if ( a != null && address.compareTo( a ) == 0 )
return b;
}
catch( NumberFormatException e ) {