mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			83 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Java
		
	
	
	
// BreakpointManager.java - A convenience class for dealing with breakpoints
 | 
						|
 | 
						|
/* Copyright (C) 2006, 2007  Free Software Foundation
 | 
						|
 | 
						|
   This file is part of libgcj.
 | 
						|
 | 
						|
This software is copyrighted work licensed under the terms of the
 | 
						|
Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
 | 
						|
details.  */
 | 
						|
 | 
						|
package gnu.gcj.jvmti;
 | 
						|
 | 
						|
import java.util.Hashtable;
 | 
						|
 | 
						|
/**
 | 
						|
 * A class which manages breakpoints in the VM interpreter engine.
 | 
						|
 *
 | 
						|
 * BreakpointManager is a location manager that the interpreter
 | 
						|
 * uses to lookup the original instruction for any given installed
 | 
						|
 * breakpoint. JVMTI does not allow multiple breakpoints to be set
 | 
						|
 * at any given location.
 | 
						|
 *
 | 
						|
 * @author Keith Seitz (keiths@redhat.com)
 | 
						|
 */
 | 
						|
public class BreakpointManager
 | 
						|
{
 | 
						|
  private static BreakpointManager _instance = new BreakpointManager ();
 | 
						|
 | 
						|
  // List of breakpoints indexed by Location
 | 
						|
  private Hashtable _breakpoints;
 | 
						|
 | 
						|
  private BreakpointManager ()
 | 
						|
  {
 | 
						|
    _breakpoints = new Hashtable ();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates a new breakpoint. SetBreakpoint will verify the validity
 | 
						|
   * of the arguments.
 | 
						|
   *
 | 
						|
   * @param method  method in which to set breakpoint (a jmethodID)
 | 
						|
   * @param location index where the breakpoint is to be set (a jlocation)
 | 
						|
   */
 | 
						|
  public static Breakpoint newBreakpoint (long method, long location)
 | 
						|
  {
 | 
						|
    NormalBreakpoint bp = new NormalBreakpoint (method, location);
 | 
						|
    Location loc = new Location (method, location);
 | 
						|
    bp.install ();
 | 
						|
    _instance._breakpoints.put (loc, bp);
 | 
						|
    return bp;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Deletes the breakpoint at the given Location
 | 
						|
   *
 | 
						|
   * @param method method in which to clear breakpoint
 | 
						|
   * @param location index of breakpoint in method
 | 
						|
   */
 | 
						|
  public static void deleteBreakpoint (long method, long location)
 | 
						|
  {
 | 
						|
    Location loc = new Location (method, location);
 | 
						|
    Breakpoint bp = (Breakpoint) _instance._breakpoints.get (loc);
 | 
						|
    if (bp != null)
 | 
						|
      {
 | 
						|
	bp.remove ();
 | 
						|
	_instance._breakpoints.remove (loc);
 | 
						|
      }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the breakpoint at the given location or null if none installed
 | 
						|
   * at location
 | 
						|
   *
 | 
						|
   * @param method the jmethodID of the breakpoint location
 | 
						|
   * @param location the index in the method
 | 
						|
   */
 | 
						|
  public static Breakpoint getBreakpoint (long method, long location)
 | 
						|
  {
 | 
						|
    Location loc = new Location (method, location);
 | 
						|
    return (Breakpoint) _instance._breakpoints.get (loc);
 | 
						|
  }
 | 
						|
}
 |