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);
 | |
|   }
 | |
| }
 |