Module jdk.jdi

Interface EventRequestManager

所有超级接口:
Mirror

public interface EventRequestManager extends Mirror
管理创建和删除EventRequest的操作。在特定VM中只存在一个此接口的实现者,并通过VirtualMachine.eventRequestManager()进行访问。
自版本:
1.3
参见:
  • Method Details

    • createClassPrepareRequest

      ClassPrepareRequest createClassPrepareRequest()
      创建一个新的已禁用的ClassPrepareRequest。新的事件请求将添加到此EventRequestManager管理的列表中。使用EventRequest.enable()来激活此事件请求。
      返回:
      创建的ClassPrepareRequest
    • createClassUnloadRequest

      ClassUnloadRequest createClassUnloadRequest()
      创建一个新的已禁用的ClassUnloadRequest。新的事件请求将添加到此EventRequestManager管理的列表中。使用EventRequest.enable()来激活此事件请求。
      返回:
      创建的ClassUnloadRequest
    • createThreadStartRequest

      ThreadStartRequest createThreadStartRequest()
      创建一个新的已禁用的ThreadStartRequest。新的事件请求将添加到此EventRequestManager管理的列表中。使用EventRequest.enable()来激活此事件请求。
      返回:
      创建的ThreadStartRequest
    • createThreadDeathRequest

      ThreadDeathRequest createThreadDeathRequest()
      创建一个新的已禁用的ThreadDeathRequest。新的事件请求将添加到此EventRequestManager管理的列表中。使用EventRequest.enable()来激活此事件请求。
      返回:
      创建的ThreadDeathRequest
    • createExceptionRequest

      ExceptionRequest createExceptionRequest(ReferenceType refType, boolean notifyCaught, boolean notifyUncaught)
      创建一个新的已禁用的ExceptionRequest。新的事件请求将添加到此EventRequestManager管理的列表中。使用EventRequest.enable()来激活此事件请求。

      可以选择特定异常类型及其子类以进行异常事件的选择。可以选择捕获的异常、未捕获的异常或两者。但请注意,在抛出异常时,不总是能够确定它是否真正被捕获。有关详细信息,请参阅ExceptionEvent.catchLocation()

      参数:
      refType - 如果非空,则指定将报告为refType实例的异常。注意: 这将包括子类型的实例。如果为null,则将报告所有实例
      notifyCaught - 如果为true,则将报告捕获的异常。
      notifyUncaught - 如果为true,则将报告未捕获的异常。
      返回:
      创建的ExceptionRequest
    • createMethodEntryRequest

      MethodEntryRequest createMethodEntryRequest()
      创建一个新的已禁用的MethodEntryRequest。新的事件请求将添加到此EventRequestManager管理的列表中。使用EventRequest.enable()来激活此事件请求。
      返回:
      创建的MethodEntryRequest
    • createMethodExitRequest

      MethodExitRequest createMethodExitRequest()
      创建一个新的已禁用的MethodExitRequest。新的事件请求将添加到此EventRequestManager管理的列表中。使用EventRequest.enable()来激活此事件请求。
      返回:
      创建的MethodExitRequest
    • createMonitorContendedEnterRequest

      MonitorContendedEnterRequest createMonitorContendedEnterRequest()
      创建一个新的已禁用的MonitorContendedEnterRequest。新的事件请求将添加到此EventRequestManager管理的列表中。使用EventRequest.enable()来激活此事件请求。并非所有目标虚拟机都支持此操作。使用VirtualMachine.canRequestMonitorEvents()来确定是否支持该操作。
      返回:
      创建的MonitorContendedEnterRequest
      抛出:
      UnsupportedOperationException - 如果目标VM不支持此操作。
      自版本:
      1.6
    • createMonitorContendedEnteredRequest

      MonitorContendedEnteredRequest createMonitorContendedEnteredRequest()
      创建一个新的禁用的MonitorContendedEnteredRequest。新的事件请求将被添加到此EventRequestManager管理的列表中。使用EventRequest.enable()来激活此事件请求。并非所有目标虚拟机都支持此操作。使用VirtualMachine.canRequestMonitorEvents()来确定是否支持该操作。
      返回:
      创建的MonitorContendedEnteredRequest
      抛出:
      UnsupportedOperationException - 如果目标虚拟机不支持此操作。
      自:
      1.6
    • createMonitorWaitRequest

      MonitorWaitRequest createMonitorWaitRequest()
      创建一个新的禁用的MonitorWaitRequest。新的事件请求将被添加到此EventRequestManager管理的列表中。使用EventRequest.enable()来激活此事件请求。并非所有目标虚拟机都支持此操作。使用VirtualMachine.canRequestMonitorEvents()来确定是否支持该操作。
      返回:
      创建的MonitorWaitRequest
      抛出:
      UnsupportedOperationException - 如果目标虚拟机不支持此操作。
      自:
      1.6
    • createMonitorWaitedRequest

      MonitorWaitedRequest createMonitorWaitedRequest()
      创建一个新的禁用的MonitorWaitedRequest。新的事件请求将被添加到此EventRequestManager管理的列表中。使用EventRequest.enable()来激活此事件请求。并非所有目标虚拟机都支持此操作。使用VirtualMachine.canRequestMonitorEvents()来确定是否支持该操作。
      返回:
      创建的MonitorWaitedRequest
      抛出:
      UnsupportedOperationException - 如果目标虚拟机不支持此操作。
      自:
      1.6
    • createStepRequest

      StepRequest createStepRequest(ThreadReference thread, int size, int depth)
      创建一个新的禁用的StepRequest。新的事件请求将被添加到此EventRequestManager管理的列表中。使用EventRequest.enable()来激活此事件请求。

      返回的请求将仅控制指定的thread中的步进;所有其他线程将不受影响。 size值为StepRequest.STEP_MIN将在代码索引更改时生成步进事件。它代表可用的最小步进大小,通常映射到指令级别。 size值为StepRequest.STEP_LINE将在源行更改时生成步进事件,除非行号信息不可用,在这种情况下将执行STEP_MIN。例如,在通过VirtualMachine.redefineClasses(java.util.Map<? extends com.sun.jdi.ReferenceType, byte[]>)操作使方法过时的执行期间,不会提供行号信息。 depth值为StepRequest.STEP_INTO将在任何调用的方法中生成步进事件。 depth值为StepRequest.STEP_OVER将限制步进事件仅限于当前帧或调用者帧。 depth值为StepRequest.STEP_OUT将限制步进事件仅限于调用者帧。所有深度限制都是相对于步进发生前的调用堆栈。

      每个线程只允许一个待处理的步进请求。

      请注意,典型的调试器在检测到第一个步进后会希望取消步进。因此,下一行方法将执行以下操作:

      
           EventRequestManager mgr = myVM.{@link VirtualMachine#eventRequestManager eventRequestManager}();
           StepRequest request = mgr.createStepRequest(myThread,
                                                       StepRequest.{@link StepRequest#STEP_LINE STEP_LINE},
                                                       StepRequest.{@link StepRequest#STEP_OVER STEP_OVER});
           request.{@link EventRequest#addCountFilter addCountFilter}(1);  // 仅下一步
           request.enable();
           myVM.{@link VirtualMachine#resume resume}();
       
      参数:
      thread - 要进行步进的线程
      size - 步进大小
      depth - 步进深度
      返回:
      创建的StepRequest
      抛出:
      DuplicateRequestException - 如果指定线程已经有一个待处理的步进请求。
      IllegalArgumentException - 如果size或depth参数包含非法值。
    • createBreakpointRequest

      BreakpointRequest createBreakpointRequest(Location location)
      创建一个新的禁用的BreakpointRequest。给定的Location必须具有有效(即非负)的代码索引。新断点将被添加到此EventRequestManager管理的列表中。允许在同一位置设置多个断点。使用EventRequest.enable()来激活此事件请求。
      参数:
      location - 新断点的位置。
      返回:
      创建的BreakpointRequest
      抛出:
      NativeMethodException - 如果位置位于本地方法内。
    • createAccessWatchpointRequest

      AccessWatchpointRequest createAccessWatchpointRequest(Field field)
      创建一个新的禁用的观察点,用于监视对指定字段的访问。新的观察点将被添加到此EventRequestManager管理的列表中。允许在同一字段上设置多个观察点。使用EventRequest.enable()来激活此事件请求。

      并非所有目标虚拟机都支持此操作。使用VirtualMachine.canWatchFieldAccess()来确定是否支持该操作。

      参数:
      field - 要监视的字段
      返回:
      创建的观察点
      抛出:
      UnsupportedOperationException - 如果目标虚拟机不支持此操作。
    • createModificationWatchpointRequest

      ModificationWatchpointRequest createModificationWatchpointRequest(Field field)
      创建一个新的禁用的观察点,用于监视对指定字段的访问。新的观察点将被添加到此EventRequestManager管理的列表中。允许在同一字段上设置多个观察点。使用EventRequest.enable()来激活此事件请求。

      并非所有目标虚拟机都支持此操作。使用VirtualMachine.canWatchFieldModification()来确定是否支持该操作。

      参数:
      field - 要监视的字段
      返回:
      创建的观察点
      抛出:
      UnsupportedOperationException - 如果目标虚拟机不支持此操作。
    • createVMDeathRequest

      VMDeathRequest createVMDeathRequest()
      创建一个新的禁用的VMDeathRequest。新请求将被添加到此EventRequestManager管理的列表中。使用EventRequest.enable()来激活此事件请求。

      此请求(如果已启用)将导致在目标虚拟机终止时发送一个VMDeathEvent

      具有SUSPEND_ALL挂起策略的VMDeathRequest可用于确保在VM终止之前处理传入的SUSPEND_NONESUSPEND_EVENT_THREAD事件。如果所有事件处理都在与读取事件集的同一线程中进行,则只需启用请求即可,因为VM将被挂起,直到包含VMDeathEventEventSet被恢复。

      并非所有目标虚拟机都支持此操作。使用VirtualMachine.canRequestVMDeathEvent()来确定是否支持该操作。

      返回:
      创建的请求
      抛出:
      UnsupportedOperationException - 如果目标虚拟机不支持此操作。
      自:
      1.4
    • deleteEventRequest

      void deleteEventRequest(EventRequest eventRequest)
      移除一个事件请求。该事件请求被禁用并从此EventRequestManager管理的请求中移除。一旦删除事件请求,将不允许任何操作(例如EventRequest.setEnabled(boolean))-尝试这样做通常会导致一个InvalidRequestStateException。不会影响其他事件请求。

      因为此方法更改事件请求的基础列表,尝试直接从请求访问器返回的列表中删除(例如下面的代码):

         Iterator iter = requestManager.stepRequests().iterator();
         while (iter.hasNext()) {
            requestManager.deleteEventRequest(iter.next());
        }
       
      可能会导致ConcurrentModificationException。而应使用deleteEventRequests(List)或在迭代之前复制列表。
      参数:
      eventRequest - 要移除的事件请求
    • deleteEventRequests

      void deleteEventRequests(List<? extends EventRequest> eventRequests)
      移除一组EventRequest
      参数:
      eventRequests - 要移除的事件请求列表
      参见:
    • deleteAllBreakpoints

      void deleteAllBreakpoints()
      移除此EventRequestManager管理的所有断点。
      参见:
    • stepRequests

      List<StepRequest> stepRequests()
      返回已启用和已禁用的步进请求的不可修改列表。此列表是这些请求的实时视图,因此随着请求的添加和删除而更改。
      返回:
      所有StepRequest对象。
    • classPrepareRequests

      List<ClassPrepareRequest> classPrepareRequests()
      返回已启用和已禁用的类准备请求的不可修改列表。此列表是这些请求的实时视图,因此随着请求的添加和删除而更改。
      返回:
      所有ClassPrepareRequest对象。
    • classUnloadRequests

      List<ClassUnloadRequest> classUnloadRequests()
      返回已启用和已禁用的类卸载请求的不可修改列表。此列表是这些请求的实时视图,因此随着请求的添加和删除而更改。
      返回:
      所有ClassUnloadRequest对象。
    • threadStartRequests

      List<ThreadStartRequest> threadStartRequests()
      返回已启用和已禁用的线程启动请求的不可修改列表。此列表是这些请求的实时视图,因此随着请求的添加和删除而更改。
      返回:
      所有ThreadStartRequest对象。
    • threadDeathRequests

      List<ThreadDeathRequest> threadDeathRequests()
      返回已启用和已禁用的线程终止请求的不可修改列表。此列表是这些请求的实时视图,因此随着请求的添加和删除而更改。
      返回:
      所有ThreadDeathRequest对象。
    • exceptionRequests

      List<ExceptionRequest> exceptionRequests()
      返回已启用和已禁用的异常请求的不可修改列表。此列表是这些请求的实时视图,因此随着请求的添加和删除而更改。
      返回:
      所有ExceptionRequest对象。
    • breakpointRequests

      List<BreakpointRequest> breakpointRequests()
      返回已启用和已禁用的断点请求的不可修改列表。此列表是这些请求的实时视图,因此随着请求的添加和删除而更改。
      返回:
      所有BreakpointRequest对象的列表。
    • accessWatchpointRequests

      List<AccessWatchpointRequest> accessWatchpointRequests()
      返回已启用和已禁用的访问监视点请求的不可修改列表。此列表是这些请求的实时视图,因此随着请求的添加和删除而更改。
      返回:
      所有AccessWatchpointRequest对象。
    • modificationWatchpointRequests

      List<ModificationWatchpointRequest> modificationWatchpointRequests()
      返回已启用和已禁用的修改监视点请求的不可修改列表。此列表是这些请求的实时视图,因此随着请求的添加和删除而更改。
      返回:
      所有ModificationWatchpointRequest对象。
    • methodEntryRequests

      List<MethodEntryRequest> methodEntryRequests()
      返回已启用和已禁用的方法进入请求的不可修改列表。此列表是这些请求的实时视图,因此随着请求的添加和删除而更改。
      返回:
      所有MethodEntryRequest对象的列表。
    • methodExitRequests

      List<MethodExitRequest> methodExitRequests()
      返回已启用和已禁用的方法退出请求的不可修改列表。此列表是这些请求的实时视图,因此随着请求的添加和删除而更改。
      返回:
      所有MethodExitRequest对象的列表。
    • monitorContendedEnterRequests

      List<MonitorContendedEnterRequest> monitorContendedEnterRequests()
      返回已启用和已禁用的监视器争用进入请求的不可修改列表。此列表是这些请求的实时视图,因此随着请求的添加和删除而更改。
      返回:
      所有MonitorContendedEnterRequest对象的列表。
      自1.6起:
      1.6
    • monitorContendedEnteredRequests

      List<MonitorContendedEnteredRequest> monitorContendedEnteredRequests()
      返回已启用和已禁用的监视器争用进入请求的不可修改列表。此列表是这些请求的实时视图,因此随着请求的添加和删除而更改。
      返回:
      所有MonitorContendedEnteredRequest对象的列表。
      自1.6起:
      1.6
    • monitorWaitRequests

      List<MonitorWaitRequest> monitorWaitRequests()
      返回已启用和已禁用的监视器等待请求的不可修改列表。此列表是这些请求的实时视图,因此随着请求的添加和删除而更改。
      返回:
      所有MonitorWaitRequest对象的列表。
      自1.6起:
      1.6
    • monitorWaitedRequests

      List<MonitorWaitedRequest> monitorWaitedRequests()
      返回已启用和已禁用的监视器等待请求的不可修改列表。此列表是这些请求的实时视图,因此随着请求的添加和删除而更改。
      返回:
      所有MonitorWaitedRequest对象的列表。
      自1.6起:
      1.6
    • vmDeathRequests

      List<VMDeathRequest> vmDeathRequests()
      返回已启用和已禁用的VM终止请求的不可修改列表。此列表是这些请求的实时视图,因此随着请求的添加和删除而更改。注意:未经请求的VMDeathEvent没有相应的请求。
      返回:
      所有VMDeathRequest对象的列表。
      自1.4起:
      1.4