Module jdk.jdi

Interface EventRequest

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

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

可以通过过滤器控制为事件请求生成的事件数量。过滤器提供事件必须满足的附加约束,然后才会将其放置在事件队列中。可以通过多次调用过滤器添加方法(例如ExceptionRequest.addClassFilter(java.lang.String classPattern))来使用多个过滤器。只有在事件被禁用时才能一次向事件添加一个过滤器。多个过滤器按照添加到请求的顺序使用截断与运算。只有满足所有过滤器的事件才会放置在事件队列中。

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

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

任何以EventRequest作为参数的EventRequest上的方法可能会在目标VM断开连接并且VMDisconnectEvent已经或可以从EventQueue中读取时抛出VMDisconnectedException

任何以EventRequest作为参数的EventRequest上的方法可能会在目标VM耗尽内存时抛出VMOutOfMemoryException

自版本:
1.3
参见:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final int
    在事件发生时挂起所有线程
    static final int
    在事件发生时仅挂起生成事件的线程
    static final int
    在事件发生时不挂起任何线程
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    addCountFilter(int count)
    将请求的事件限制为在给定次数发生后最多报告一次。
    void
    setEnabled(false)相同。
    void
    enable()
    setEnabled(true)相同。
    返回具有指定键的属性的值。
    boolean
    确定此事件请求当前是否已启用。
    void
    putProperty(Object key, Object value)
    向此请求添加任意键/值“属性”。
    void
    setEnabled(boolean val)
    启用或禁用此事件请求。
    void
    setSuspendPolicy(int policy)
    确定在目标VM中请求的事件发生时要挂起的线程。
    int
    返回描述在目标VM中请求的事件发生时要挂起的线程的值。

    Methods declared in interface com.sun.jdi.Mirror

    toString, virtualMachine
  • Field Details

    • SUSPEND_NONE

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

      static final int SUSPEND_EVENT_THREAD
      在事件发生时仅挂起生成事件的线程
      参见:
    • SUSPEND_ALL

      static final int SUSPEND_ALL
      在事件发生时挂起所有线程
      参见:
  • Method Details

    • isEnabled

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

      void setEnabled(boolean val)
      启用或禁用此事件请求。在此事件请求被禁用时,将忽略该事件请求,并且如果其任何线程达到事件请求,目标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小于1。
    • 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_ALLSUSPEND_EVENT_THREADSUSPEND_NONE
      返回:
      此请求的当前挂起模式
    • putProperty

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

      get/putProperty 方法提供对一个小型每个实例的映射的访问。这与Properties 不应混淆。

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

      参见:
    • getProperty

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