在目标虚拟机(VM)中,可能会同时发生多个事件。例如,对于给定的位置可能有多个断点请求,或者你可能单步执行到与断点请求相同的位置。这些事件被一起作为复合事件(composite event)传递。为了统一性,即使只有一个事件需要报告,也总是使用复合事件来传递事件。
复合事件中分组的事件有以下限制:
- 仅与同一线程的其他线程启动事件一起:线程启动事件(Thread Start Event)
- 仅与同一线程的其他线程死亡事件一起:线程死亡事件(Thread Death Event)
- 仅与同一类的其他类准备事件一起:类准备事件(Class Prepare Event)
- 仅与同一类的其他类卸载事件一起:类卸载事件(Class Unload Event)
- 仅与同一字段访问的其他访问监视点事件一起:访问监视点事件(Access Watchpoint Event)
- 仅与同一字段修改的其他修改监视点事件一起:修改监视点事件(Modification Watchpoint Event)
- 仅与同一监视对象的其他监视器竞争进入事件一起:监视器竞争进入事件(Monitor Contended Enter Event)
- 仅与同一监视对象的其他监视器竞争进入事件一起:监视器竞争进入事件(Monitor Contended Entered Event)
- 仅与同一监视对象的其他监视器等待事件一起:监视器等待事件(Monitor Wait Event)
- 仅与同一监视对象的其他监视器等待事件一起:监视器已等待事件(Monitor Waited Event)
- 仅与同一异常发生的其他异常事件一起:异常事件(ExceptionEvent)
- 仅与同一位置、同一线程的其他事件成员一起:断点事件(Breakpoint Event)、单步事件(Step Event)、方法入口事件(Method Entry Event)、方法退出事件(Method Exit Event)
这些限制确保了事件的有序性和一致性,使得调试会话能够清晰地理解和处理发生的事件序列。