Source for gnu.gcj.jvmti.BreakpointManager

   1: // BreakpointManager.java - A convenience class for dealing with breakpoints
   2: 
   3: /* Copyright (C) 2006, 2007  Free Software Foundation
   4: 
   5:    This file is part of libgcj.
   6: 
   7: This software is copyrighted work licensed under the terms of the
   8: Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
   9: details.  */
  10: 
  11: package gnu.gcj.jvmti;
  12: 
  13: import java.util.Hashtable;
  14: 
  15: /**
  16:  * A class which manages breakpoints in the VM interpreter engine.
  17:  *
  18:  * BreakpointManager is a location manager that the interpreter
  19:  * uses to lookup the original instruction for any given installed
  20:  * breakpoint. JVMTI does not allow multiple breakpoints to be set
  21:  * at any given location.
  22:  *
  23:  * @author Keith Seitz (keiths@redhat.com)
  24:  */
  25: public class BreakpointManager
  26: {
  27:   private static BreakpointManager _instance = new BreakpointManager ();
  28: 
  29:   // List of breakpoints indexed by Location
  30:   private Hashtable _breakpoints;
  31: 
  32:   private BreakpointManager ()
  33:   {
  34:     _breakpoints = new Hashtable ();
  35:   }
  36: 
  37:   /**
  38:    * Creates a new breakpoint. SetBreakpoint will verify the validity
  39:    * of the arguments.
  40:    *
  41:    * @param method  method in which to set breakpoint (a jmethodID)
  42:    * @param location index where the breakpoint is to be set (a jlocation)
  43:    */
  44:   public static Breakpoint newBreakpoint (long method, long location)
  45:   {
  46:     NormalBreakpoint bp = new NormalBreakpoint (method, location);
  47:     Location loc = new Location (method, location);
  48:     bp.install ();
  49:     _instance._breakpoints.put (loc, bp);
  50:     return bp;
  51:   }
  52: 
  53:   /**
  54:    * Deletes the breakpoint at the given Location
  55:    *
  56:    * @param method method in which to clear breakpoint
  57:    * @param location index of breakpoint in method
  58:    */
  59:   public static void deleteBreakpoint (long method, long location)
  60:   {
  61:     Location loc = new Location (method, location);
  62:     Breakpoint bp = (Breakpoint) _instance._breakpoints.get (loc);
  63:     if (bp != null)
  64:       {
  65:     bp.remove ();
  66:     _instance._breakpoints.remove (loc);
  67:       }
  68:   }
  69: 
  70:   /**
  71:    * Returns the breakpoint at the given location or null if none installed
  72:    * at location
  73:    *
  74:    * @param method the jmethodID of the breakpoint location
  75:    * @param location the index in the method
  76:    */
  77:   public static Breakpoint getBreakpoint (long method, long location)
  78:   {
  79:     Location loc = new Location (method, location);
  80:     return (Breakpoint) _instance._breakpoints.get (loc);
  81:   }
  82: }