if ( combinedEventsLocation == null ) {
String failureMessage = "## FAILURE: Can NOT get MethodEntryLocation for method '"
+ methodForEvents + "'";
printErrorAndFail(failureMessage);
}
ReplyPacket reply = debuggeeWrapper.vmMirror.setBreakpoint(combinedEventsLocation);
int breakpointRequestID = reply.getNextValueAsInt();
logWriter.println("=> Breakpoint requestID = " + breakpointRequestID);
logWriter.println("=> Set request for METHOD_ENTRY event in debuggee: "
+ getDebuggeeClassName() + ", method: " + methodForEvents);
reply = debuggeeWrapper.vmMirror
.setMethodEntry(methodEntryClassNameRegexp);
checkReplyPacket(reply, "Set METHOD_ENTRY event");
int methodEntryRequestID = reply.getNextValueAsInt();
logWriter.println("=> METHOD_ENTRY requestID = " + methodEntryRequestID);
logWriter.println("");
// logWriter.println("=> Resume debuggee");
// debuggeeWrapper.vmMirror.resume();
synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
// receive and check combined METHOD_ENTRY, BREAKPOINT events
logWriter
.println("=> Try to receive and check combined events: METHOD_ENTRY, BREAKPOINT events");
EventPacket event = debuggeeWrapper.vmMirror.receiveEvent();
ParsedEvent[] parsedEvents = ParsedEvent.parseEventPacket(event);
// print all received events
logWriter.println("=> Events received: " + parsedEvents.length);
for (int i = 0; i < parsedEvents.length; i++) {
logWriter.println("");
logWriter.println("=> Event #" + i + ";");
logWriter.println("=> EventKind: "
+ parsedEvents[i].getEventKind()
+ "["
+ JDWPConstants.EventKind.getName(parsedEvents[i]
.getEventKind()) + "]");
logWriter
.println("=> RequestID: " + parsedEvents[i].getRequestID());
}
boolean success = true;
boolean locationsOK = checkEventsLocation(parsedEvents, combinedEventsLocation);
if (parsedEvents.length == EXPECTED_EVENTS_COUNT) {
logWriter.println("");
logWriter
.println("=> Combined events are received. Check events..");
for (int i = 0; i < parsedEvents.length; i++) {
boolean isFound = false;
for (int j = 0; j < EXPECTED_EVENTS_COUNT; j++) {
if (parsedEvents[i].getEventKind() == EXPECTED_EVENTS_ARRAY[j]) {
EXPECTED_EVENTS_ARRAY[j] = 0;
isFound = true;
break;
}
}
if (!isFound) {
logWriter
.println("##FAILURE: received unexpected event: "
+ parsedEvents[i].getEventKind()
+ "["
+ JDWPConstants.EventKind
.getName(parsedEvents[0]
.getEventKind()) + "]");
success = false;
}
}
if (!success) {
logWriter.println("");
logWriter
.println("##FAILURE: the following events were not received: ");
for (int k = 0; k < EXPECTED_EVENTS_COUNT; k++) {
if (EXPECTED_EVENTS_ARRAY[k] != 0)
logWriter.println(" #"
+ k
+ ": "
+ EXPECTED_EVENTS_ARRAY[k]
+ "["
+ JDWPConstants.EventKind
.getName(EXPECTED_EVENTS_ARRAY[k])
+ "]");
}
//DBG__fail("not all expected events were received");
}
} else {
logWriter.println("##FAILURE: received unexpected number of events: "
+ parsedEvents.length
+ " instead of "
+ EXPECTED_EVENTS_COUNT);
//DBG__fail("received unexpected number of events: " + parsedEvents.length);
}
if ( (! success) || (! locationsOK) ) {
logWriter.println("## FAILURE during checking events!");
}
logWriter.println("");
logWriter.println("=> Clean request for METHOD_ENTRY event...");
ReplyPacket clearReply = debuggeeWrapper.vmMirror.clearEvent(
JDWPConstants.EventKind.METHOD_ENTRY, methodEntryRequestID);
checkReplyPacket(clearReply, "EventRequest::Clear");
logWriter.println("=> Resume debuggee");
debuggeeWrapper.vmMirror.resume();