引入:
上文主要讲解了JDI的连接模块来建立Debugger到Target VM之间的连接,这里主要讲解事件请求和处理模块。它们都在com.sun.jdi.event和com.sun.jdi.request包中。
分析:
Part 1:查看JDI中定义的事件类型
JDI中事件的接口叫Event .
1
2
3
4
|
public abstract interface Event extends Mirror
{
public abstract EventRequest request();
}
|
它定义了18种具体的事件类型,如下:
ClassPrepareEvent
|
装载某个指定的类所引发的事件
|
ClassUnloadEvent
|
卸载某个指定的类所引发的事件
|
BreakingpointEvent
|
设置断点所引发的事件
|
ExceptionEvent
|
目标虚拟机运行中抛出指定异常所引发的事件
|
MethodEntryEvent
|
进入某个指定方法体时引发的事件
|
MethodExitEvent
|
某个指定方法执行完成后引发的事件
|
MonitorContendedEnteredEvent
|
线程已经进入某个指定 Monitor 资源所引发的事件
|
MonitorContendedEnterEvent
|
线程将要进入某个指定 Monitor 资源所引发的事件
|
MonitorWaitedEvent
|
线程完成对某个指定 Monitor 资源等待所引发的事件
|
MonitorWaitEvent
|
线程开始等待对某个指定 Monitor 资源所引发的事件
|
StepEvent
|
目标应用程序执行下一条指令或者代码行所引发的事件
|
AccessWatchpointEvent
|
查看类的某个指定 Field 所引发的事件
|
ModificationWatchpointEvent
|
修改类的某个指定 Field 值所引发的事件
|
ThreadDeathEvent
|
某个指定线程运行完成所引发的事件
|
ThreadStartEvent
|
某个指定线程开始运行所引发的事件
|
VMDeathEvent
|
目标虚拟机停止运行所以的事件
|
VMDisconnectEvent
|
目标虚拟机与调试器断开链接所引发的事件
|
VMStartEvent
|
目标虚拟机初始化时所引发的事件
|
Part 2:事件集的概念
事件集是事件发送的最小单位,并且事件集一旦被创建,则不可以被修改。
1
2
3
4
5
6
7
8
|
public abstract interface EventSet extends Mirror, Set
{
public abstract int suspendPolicy();
public abstract EventIterator eventIterator();
public abstract void resume();
}
|
它也提供了迭代器来访问事件集内的事件。