模块 jdk.jdi

接口 EventRequestManager

所有父级接口:
Mirror

public interface EventRequestManager extends Mirror
管理 EventRequest 的创建和删除。此接口的单个实现者存在于特定 VM 中,并通过 VirtualMachine.eventRequestManager() 访问
自从:
1.3
参见:
  • 方法详情

    • 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 实例的异常。注意:这将包括子类型的实例。如果为空,将报告所有实例
      notifyCaught - 如果为 true,将报告捕获的异常。
      notifyUncaught - 如果为真,将报告未捕获的异常。
      返回:
      创建的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 - 如果目标 VM 不支持此操作。
      自从:
      1.6
    • createMonitorWaitRequest

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

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

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

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

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

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

      
         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); // next step only
         request.enable();
         myVM.{@link VirtualMachine#resume resume}();
        
      参数:
      thread - 要进入的线程
      size - 步长
      depth - 步进深度
      返回:
      创建的StepRequest
      抛出:
      DuplicateRequestException - 如果指定线程已经有待处理的步骤请求。
      IllegalArgumentException - 如果大小或深度参数包含非法值。
    • 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() 激活此事件请求。

      此请求(如果启用)将导致在目标 VM 终止时发送 VMDeathEvent

      具有 SUSPEND_ALL 挂起策略的 VMDeathRequest 可用于确保在 VM 死亡之前处理传入的 SUSPEND_NONE SUSPEND_EVENT_THREAD 事件。如果所有事件处理都在与读取事件集相同的线程中完成,则启用请求就是所需的全部,因为 VM 将暂停,直到恢复包含 VMDeathEvent EventSet

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

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

      void deleteEventRequest(EventRequest  eventRequest)
      移除一个 eventRequest。 eventRequest 被禁用并从此 EventRequestManager 管理的请求中删除。删除 eventRequest 后,不允许执行任何操作(例如 EventRequest.setEnabled(boolean) )——尝试这样做通常会导致 InvalidRequestStateException 。没有其他 eventRequests 受到影响。

      因为这个方法改变了事件请求的底层列表,试图直接从请求访问器返回的列表中删除(例如下面):

        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()
      返回已启用和已禁用步骤请求的不可修改列表。此list是这些请求的实时视图,因此会随着请求的添加和删除而变化。
      返回:
      所有 StepRequest 对象。
    • classPrepareRequests

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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