int evento=0;
while(it.hasNext())
{
Event event=it.next();
chrono.setLastNow();
//System.out.println("\t" + ++evento + ", " + event + " request:" + event.request() + (event.request()!=null ? "suspendPolicy:" + event.request().suspendPolicy() : ""));
if(event instanceof ThreadStartEvent)
{
generatedEvents.add(dataManager.createThreadStartEvent((ThreadStartEvent) event));
resumir.add(((ThreadStartEvent) event).thread());
}
else if(event instanceof ThreadDeathEvent)
{
generatedEvents.add(dataManager.createThreadDeathEvent((ThreadDeathEvent) event));
resumir.add(((ThreadDeathEvent) event).thread());
}
else if(event instanceof ClassPrepareEvent)
{
ClassPrepareEvent cpe=(ClassPrepareEvent) event;
//deshabilitar evento
/*event.request().disable();
vm.eventRequestManager().deleteEventRequest(event.request());
*/
ReferenceType rt = cpe.referenceType();
//inspeccion method entry y method exit
//primero se ejecuta el breakpoint
if(traceFilter.isTraceMethods())
{
for(Method method : rt.methods())
{
if(method.location()!=null)
{
BreakpointRequest br = vm.eventRequestManager().createBreakpointRequest(method.location());
br.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD);
br.putProperty("START", true);
br.setEnabled(true);
}
/*
for(int i=1; i<method.allLineLocations().size(); i++)
{
br = vm.eventRequestManager().createBreakpointRequest(method.allLineLocations().get(i));
br.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD);
br.putProperty("START", false);
br.setEnabled(true);
}*/
}
}
//inspeccion de acceso y modificacionde atributos
if(traceFilter.isTraceFields())
{
for(Field field : rt.fields())
{
AccessWatchpointRequest awr = vm.eventRequestManager().createAccessWatchpointRequest(field);
awr.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD);
awr.setEnabled(true);
ModificationWatchpointRequest mwr = vm.eventRequestManager().createModificationWatchpointRequest(field);
mwr.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD);
mwr.setEnabled(true);
}
}
//inspeccionar excepciones
if(traceFilter.isTraceExceptions())
{
ExceptionRequest er = vm.eventRequestManager().createExceptionRequest(null, true, true);
er.addClassFilter(rt);
er.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD);
er.setEnabled(true);
}
//evento
generatedEvents.add(dataManager.createClassLoadEvent(cpe));
resumir.add(((ClassPrepareEvent) event).thread());
}
//se entro a un evento
else if(event instanceof BreakpointEvent)
{
//System.out.println("\t\t" + event);//////////////////////
//printStackTrace(((BreakpointEvent) event).thread());
BreakpointEvent be=(BreakpointEvent) event;
/*
if((Boolean) be.request().getProperty("START"))
{
if(!be.location().method().isConstructor())
{
generatedEvents.add(dataManager.createMethodEntryEvent(be));
}
else
{
generatedEvents.add(dataManager.createNewObjectEvent(be));
}
}
*/
/*if(vm.eventRequestManager().methodEntryRequests().size()==0)
{
MethodEntryRequest mer = vm.eventRequestManager().createMethodEntryRequest();
mer.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD);
mer.addThreadFilter(be.thread());
MethodExitRequest mxr = vm.eventRequestManager().createMethodExitRequest();
mxr.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD);
mxr.addThreadFilter(be.thread());
}
habilitarMethodEvents=true;
System.out.println("\t\t\t" + "solicitar eventos metodos: " + habilitarMethodEvents);//////////////////////
*/
// //generar evento
EEvent eEvent=null;
if(!be.location().method().isConstructor())
{
generatedEvents.add(eEvent=dataManager.createMethodEntryEvent(be));
}
else
{
generatedEvents.add(eEvent=dataManager.createNewObjectEvent(be));
}
{
//crea method entry para desactivar method exit cuando empiece a bajar en el stack trace
MethodEntryRequest mer = vm.eventRequestManager().createMethodEntryRequest();
mer.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD);
mer.addThreadFilter(be.thread());
mer.putProperty("eEvent", eEvent);
mer.setEnabled(true);
//crea method exit para cuando salga de este stacktrace
MethodExitRequest mxr = vm.eventRequestManager().createMethodExitRequest();
mxr.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD);
mxr.addThreadFilter(be.thread());
mxr.putProperty("eEvent", eEvent);
mxr.setEnabled(true);
//System.out.println("\t\t\teventID: " + eEvent.getId());
}
//
// entries.add(eEvent);
//
// //crea step into
// if(vm.eventRequestManager().stepRequests().size()>0)
// {
// vm.eventRequestManager().stepRequests().get(0).disable();
// vm.eventRequestManager().deleteEventRequest(vm.eventRequestManager().stepRequests().get(0));
// }
//
// StepRequest sr = vm.eventRequestManager().createStepRequest(be.thread(), StepRequest.STEP_MIN, StepRequest.STEP_INTO);
// sr.addCountFilter(1);
// sr.putProperty("eEvent", eEvent);
// sr.setEnabled(true);
// }
// /*
// MethodEntryRequest mer = vm.eventRequestManager().createMethodEntryRequest();
// mer.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD);
// mer.putProperty("eEvent", eEvent);
// mer.setEnabled(true);
//
// MethodExitRequest mxr = vm.eventRequestManager().createMethodExitRequest();
// mxr.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD);
// mer.putProperty("eEvent", eEvent);
// mxr.setEnabled(true);*/
}
//se esta bajando en el stacktrace
else if(event instanceof MethodEntryEvent)
{/*
System.out.println("\t\t" + event);//////////////////////
if(vm.eventRequestManager().methodEntryRequests().size()>0)
{
habilitarMethodEvents=false;
System.out.println("\t\t\t" + "solicitar eventos metodos: " + habilitarMethodEvents);//////////////////////
//vm.eventRequestManager().deleteEventRequests(vm.eventRequestManager().methodEntryRequests());
//vm.eventRequestManager().deleteEventRequests(vm.eventRequestManager().methodExitRequests());
}
/*
System.out.println("no tuvo que haber entrado aqui!!!");
if(event.request().getProperty("eEvent")==null)
{
System.out.println("extra " + event + ", " + ((MethodEntryEvent) event).thread().frames().size());
printStackTrace(((MethodEntryEvent) event).thread());
}
else{
*/
//System.out.println("\t\t" + event + "," + ((EEvent)event.request().getProperty("eEvent")).getId());//////////////////////
//printStackTrace(((MethodEntryEvent) event).thread());
//deshabilita method entry
event.request().disable();
//deshabilita method exit
MethodExitRequest mxr = null;
for(MethodExitRequest mx : vm.eventRequestManager().methodExitRequests())
{
Long id=((EEvent)mx.getProperty("eEvent")).getId();
if(id!=null && id.equals(((EEvent)event.request().getProperty("eEvent")).getId()))
{
mxr=mx;
break;
}
}
mxr.disable();
//desabiliat otros steps requests
if(vm.eventRequestManager().stepRequests().size()>0)
vm.eventRequestManager().stepRequests().get(vm.eventRequestManager().stepRequests().size()-1).disable();
StepRequest sr = vm.eventRequestManager().createStepRequest(((MethodEntryEvent) event).thread(), StepRequest.STEP_LINE, StepRequest.STEP_OUT);
//sr.addCountFilter(1);
sr.putProperty("eEvent", event.request().getProperty("eEvent"));
sr.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD);
sr.setEnabled(true);
//}
}
else if(event instanceof MethodExitEvent)
{
/*System.out.println("\t\t" + event);//////////////////////
//generar evento
generatedEvents.add(dataManager.createMethodExitEvent((MethodExitEvent) event));
habilitarMethodEvents=false;
System.out.println("\t\t\t" + "solicitar eventos metodos: " + habilitarMethodEvents);//////////////////////
//vm.eventRequestManager().deleteEventRequests(vm.eventRequestManager().methodEntryRequests());
//vm.eventRequestManager().deleteEventRequests(vm.eventRequestManager().methodExitRequests());
// if(event.request().getProperty("eEvent")==null)
// {System.out.println("extra " + event + ", " + ((MethodExitEvent) event).thread().frames().size());
// printStackTrace(((MethodExitEvent) event).thread());
// }
// else{*/
//System.out.println("\t\t" + event + ", " + ((EEvent)event.request().getProperty("eEvent")).getId());//////////////////////
//printStackTrace(((MethodExitEvent) event).thread());
//System.out.println("method exit event depth: " + ((MethodExitEvent) event).thread().frames().size());
//System.out.println("method exit request depth: " + ((EStackFrameLocatableEvent)event.request().getProperty("eEvent")).getStackFrame().getDepth());
//if(((MethodExitEvent) event).thread().frames().size()==((EStackFrameLocatableEvent)event.request().getProperty("eEvent")).getStackFrame().getDepth())
{
//generar evento
generatedEvents.add(dataManager.createMethodExitEvent((MethodExitEvent) event));
//destruye method entry
MethodEntryRequest mer = null;
for(MethodEntryRequest me : vm.eventRequestManager().methodEntryRequests())
{
Long id=((EEvent)me.getProperty("eEvent")).getId();
if(id!=null && id.equals(((EEvent)event.request().getProperty("eEvent")).getId()))
{
mer=me;
break;
}
}
mer.disable();
vm.eventRequestManager().deleteEventRequest(mer);
//destruye step into
/*StepRequest s = null;
for(StepRequest se : vm.eventRequestManager().stepRequests())
{
Long id=((EEvent)se.getProperty("eEvent")).getId();
if(id!=null && id.equals(((EEvent)event.request().getProperty("eEvent")).getId()))
{
mer=se;
break;
}
}
mer.disable();
vm.eventRequestManager().deleteEventRequest(mer);
*/
//destruye method exit
event.request().disable();
vm.eventRequestManager().deleteEventRequest(event.request());
}
// }
// }
}
//se esta subiendo en el stack trace
else if(event instanceof StepEvent)
{
//System.out.println(event + "... " + (((StepRequest)event.request()).depth()==StepRequest.STEP_INTO ? "IN" : "OUT"));//////////////////////
//printStackTrace(((StepEvent) event).thread());
/*
if(((StepRequest)event.request()).depth()==StepRequest.STEP_INTO)
{
event.request().disable();
vm.eventRequestManager().deleteEventRequest(event.request());
StepRequest sr = vm.eventRequestManager().createStepRequest(((StepEvent) event).thread(), StepRequest.STEP_MIN, StepRequest.STEP_OUT);
sr.addCountFilter(1);
sr.putProperty("eEvent", event.request().getProperty("eEvent"));
sr.setEnabled(true);
//deshabilita method exit
MethodExitRequest mxr = null;
for(MethodExitRequest mx : vm.eventRequestManager().methodExitRequests())
{
Long id=((EEvent)mx.getProperty("eEvent")).getId();
if(id!=null && id.equals(((EEvent)mx.getProperty("eEvent")).getId()))
{
mxr=mx;
break;
}
}
mxr.disable();
}
else
{
event.request().disable();
vm.eventRequestManager().deleteEventRequest(event.request());
StepRequest sr = vm.eventRequestManager().createStepRequest(((StepEvent) event).thread(), StepRequest.STEP_MIN, StepRequest.STEP_INTO);
sr.addCountFilter(1);
sr.putProperty("eEvent", event.request().getProperty("eEvent"));
sr.setEnabled(true);
//habilita method exit
MethodExitRequest mxr = null;
for(MethodExitRequest mx : vm.eventRequestManager().methodExitRequests())
{
Long id=((EEvent)mx.getProperty("eEvent")).getId();
if(id!=null && id.equals(((EEvent)mx.getProperty("eEvent")).getId()))
{
mxr=mx;
break;
}
}
mxr.enable();
}
/*
if(((StepRequest)event.request()).depth()==StepRequest.STEP_INTO)
{
System.out.println("IN: " + event + "... " + ((StepEvent) event).thread().frameCount());
event.request().disable();
vm.eventRequestManager().deleteEventRequest(event.request());
StepRequest sr = vm.eventRequestManager().createStepRequest(((StepEvent) event).thread(), StepRequest.STEP_MIN, StepRequest.STEP_OUT);
sr.addCountFilter(1);
sr.setEnabled(true);
}
else
{
System.out.println("OUT: " + event + "... " + ((StepEvent) event).thread().frameCount());
event.request().disable();
vm.eventRequestManager().deleteEventRequest(event.request());
StepRequest sr = vm.eventRequestManager().createStepRequest(((StepEvent) event).thread(), StepRequest.STEP_MIN, StepRequest.STEP_INTO);
sr.addCountFilter(1);
sr.setEnabled(true);
}
*/
//System.out.println("\t\t" + event + "... " + ((StepEvent) event).location() + ", " + ((EEvent)event.request().getProperty("eEvent")).getId());//////////////////////
//printStackTrace(((StepEvent) event).thread());
//System.out.println("offical depth: " + ((EStackFrameLocatableEvent) event.request().getProperty("eEvent")).getStackFrame().getDepth());
//System.out.println("real: " + ((StepEvent) event).thread().frameCount());
//generar otro step out
if(((EStackFrameLocatableEvent) event.request().getProperty("eEvent")).getStackFrame().getDepth()<((StepEvent) event).thread().frameCount())
{
}
else
{
//habilita method entry
MethodEntryRequest mer = null;
for(MethodEntryRequest me : vm.eventRequestManager().methodEntryRequests())
{
Long id=((EEvent) me.getProperty("eEvent")).getId();
if(id!=null && id.equals(((EEvent)event.request().getProperty("eEvent")).getId()))
{
mer=me;
break;
}
}
mer.enable();
//habilita method exit
MethodExitRequest mxr = null;
for(MethodExitRequest mx : vm.eventRequestManager().methodExitRequests())
{
Long id=((EEvent) mx.getProperty("eEvent")).getId();
if(id!=null && id.equals(((EEvent)event.request().getProperty("eEvent")).getId()))
{
mxr=mx;
break;
}
}
mxr.enable();
//destruye step out
event.request().disable();
vm.eventRequestManager().deleteEventRequest(event.request());
//habilita el siguiente step out
if(vm.eventRequestManager().stepRequests().size()>0)
vm.eventRequestManager().stepRequests().get(vm.eventRequestManager().stepRequests().size()-1).enable();