模块 jdk.jdi

接口 EventRequest

所有父级接口:
Mirror
所有已知的子接口:
AccessWatchpointRequest , BreakpointRequest , ClassPrepareRequest , ClassUnloadRequest , ExceptionRequest , MethodEntryRequest , MethodExitRequest , ModificationWatchpointRequest , MonitorContendedEnteredRequest , MonitorContendedEnterRequest , MonitorWaitedRequest , MonitorWaitRequest , StepRequest , ThreadDeathRequest , ThreadStartRequest , VMDeathRequest , WatchpointRequest

public interface EventRequest extends Mirror
表示对事件通知的请求。示例包括 BreakpointRequest ExceptionRequest 。当存在启用请求的事件发生时,EventSet 将被放置在 EventQueue 上。现有事件请求的集合由 EventRequestManager 管理。

可以通过过滤器控制为事件请求生成的事件数。过滤器提供了事件在被放入事件队列之前必须满足的额外约束。可以通过多次调用过滤器添加方法(例如 ExceptionRequest.addClassFilter(java.lang.String classPattern) )来使用多个过滤器。只有当事件被禁用时,过滤器才会一次一个地添加到事件中。多个过滤器使用 CUT-OFF AND 应用,按照它被添加到请求的顺序。只有满足所有过滤器的事件才会被放入事件队列。

可用过滤器集取决于事件请求,过滤器的一些示例是:

  • 线程过滤器允许控制为其生成事件的线程。
  • 类过滤器允许控制事件发生的类。
  • 实例过滤器允许控制事件发生的实例。
  • 计数过滤器允许控制事件报告的次数。
过滤器可以通过减少从目标 VM 发送到调试器 VM 的事件流量来显着提高调试器性能。

如果目标 VM 已断开连接并且 VMDisconnectEvent 已经或可从 EventQueue 读取,则 EventRequest 上以 EventRequest 作为参数的任何方法都可能抛出 VMDisconnectedException

如果目标 VM 内存不足,EventRequest 上以 EventRequest 作为参数的任何方法都可能抛出 VMOutOfMemoryException

自从:
1.3
参见:
  • 字段详细信息

    • SUSPEND_NONE

      static final int SUSPEND_NONE
      事件发生时不挂起任何线程
      参见:
    • SUSPEND_EVENT_THREAD

      static final int SUSPEND_EVENT_THREAD
      当事件发生时只挂起产生事件的线程
      参见:
    • SUSPEND_ALL

      static final int SUSPEND_ALL
      事件发生时挂起所有线程
      参见:
  • 方法详情

    • isEnabled

      boolean isEnabled()
      确定当前是否启用此事件请求。
      返回:
      true 如果启用; false否则。
    • setEnabled

      void setEnabled(boolean val)
      启用或禁用此事件请求。当此事件请求被禁用时,事件请求将被忽略,并且如果目标 VM 的任何线程到达事件请求,则目标 VM 将不会停止。禁用的事件请求仍然存在,并包含在事件请求列表中,例如 EventRequestManager.breakpointRequests()
      参数:
      val - true 如果要启用事件请求; false否则。
      抛出:
      InvalidRequestStateException - 如果此请求已被删除。
      IllegalThreadStateException - 如果这是一个 StepRequest,valtrue,并且请求中指定的线程已经终止或尚未启动。
    • enable

      void enable()
      setEnabled(true) 相同。
      抛出:
      InvalidRequestStateException - 如果此请求已被删除。
      IllegalThreadStateException - 如果这是一个 StepRequest 并且请求中指定的线程已终止或尚未启动。
    • disable

      void disable()
      setEnabled(false) 相同。
      抛出:
      InvalidRequestStateException - 如果此请求已被删除。
    • addCountFilter

      void addCountFilter(int count)
      限制请求的事件在给定的发生次数后最多报告一次。到达此过滤器的前 count - 1 次未报告该事件。要请求一次性事件,请使用计数 1 调用此方法。

      一旦计数达到 0,将应用此请求中的任何后续过滤器。如果这些过滤器均未导致事件被抑制,则报告该事件。否则,不会报告该事件。在任何一种情况下,都不会为此请求报告后续事件。

      参数:
      count - 生成事件之前发生的次数。
      抛出:
      InvalidRequestStateException - 如果此请求当前已启用或已被删除。过滤器只能添加到禁用的请求。
      IllegalArgumentException - 如果 count 小于一。
    • setSuspendPolicy

      void setSuspendPolicy(int policy)
      确定在目标 VM 中发生请求的事件时要挂起的线程。使用 SUSPEND_ALL 挂起目标 VM 中的所有线程(默认)。使用 SUSPEND_EVENT_THREAD 仅挂起生成事件的线程。使用 SUSPEND_NONE 暂停任何线程。

      通过事件的线程挂起与明确请求的挂起具有相同的功能。有关详细信息,请参阅 ThreadReference.suspend() VirtualMachine.suspend()

      参数:
      policy - 选定的暂停策略。
      抛出:
      InvalidRequestStateException - 如果此请求当前已启用或已被删除。暂停策略只能在禁用的请求中设置。
      IllegalArgumentException - 如果策略参数包含非法值。
    • suspendPolicy

      int suspendPolicy()
      返回一个值,该值描述了当请求的事件在目标 VM 中发生时要挂起的线程。返回值为 SUSPEND_ALL SUSPEND_EVENT_THREAD SUSPEND_NONE
      返回:
      此请求的当前挂起模式
    • putProperty

      void putProperty(Object  key, Object  value)
      向此请求添加任意键/值“属性”。 JDI 的客户端可以使用该属性将应用程序信息与请求相关联; JDI 不在内部使用这些客户端设置的属性。

      get/putProperty 方法提供对小型实例映射的访问。这是notProperties 混淆。

      如果值为 null,此方法将删除该属性。

      参见:
    • getProperty

      Object  getProperty(Object  key)
      返回具有指定键的属性的值。只有添加了 putProperty(java.lang.Object, java.lang.Object) 的属性才会返回非空值。
      返回:
      此属性的值或 null
      参见: