[jboss-svn-commits] JBL Code SVN: r26430 - labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/core.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri May 8 07:43:20 EDT 2009
Author: mark.proctor at jboss.com
Date: 2009-05-08 07:43:20 -0400 (Fri, 08 May 2009)
New Revision: 26430
Modified:
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/core/DroolsDebugTarget.java
Log:
-moved from methodentryevent to breakpoint event
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/core/DroolsDebugTarget.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/core/DroolsDebugTarget.java 2009-05-08 10:12:55 UTC (rev 26429)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/core/DroolsDebugTarget.java 2009-05-08 11:43:20 UTC (rev 26430)
@@ -25,6 +25,7 @@
import com.sun.jdi.ClassType;
import com.sun.jdi.IntegerValue;
+import com.sun.jdi.Location;
import com.sun.jdi.Method;
import com.sun.jdi.ObjectCollectedException;
import com.sun.jdi.ObjectReference;
@@ -33,6 +34,7 @@
import com.sun.jdi.ThreadReference;
import com.sun.jdi.VMDisconnectedException;
import com.sun.jdi.VirtualMachine;
+import com.sun.jdi.event.BreakpointEvent;
import com.sun.jdi.event.ClassPrepareEvent;
import com.sun.jdi.event.Event;
import com.sun.jdi.event.EventSet;
@@ -40,6 +42,7 @@
import com.sun.jdi.event.ThreadDeathEvent;
import com.sun.jdi.event.ThreadStartEvent;
import com.sun.jdi.event.VMStartEvent;
+import com.sun.jdi.request.BreakpointRequest;
import com.sun.jdi.request.ClassPrepareRequest;
import com.sun.jdi.request.EventRequest;
import com.sun.jdi.request.EventRequestManager;
@@ -654,13 +657,13 @@
protected MVELTraceHandler() {
createRequest();
- }
+ }
protected void createRequest() {
EventRequestManager manager = getEventRequestManager();
if ( manager != null ) {
try {
- ClassPrepareRequest req = manager.createClassPrepareRequest();
+ ClassPrepareRequest req = manager.createClassPrepareRequest();
req.addClassFilter( "org.drools.base.mvel.MVELDebugHandler" );
req.setSuspendPolicy( EventRequest.SUSPEND_ALL );
addJDIEventListener( MVELTraceHandler.this,
@@ -685,10 +688,30 @@
*/
public boolean handleEvent(Event event,
JDIDebugTarget target) {
- String name = ((ClassPrepareEvent) event).referenceType().name();
+ ClassType classType = ( ClassType ) ((ClassPrepareEvent) event).referenceType();
+ String name = classType.name();
- MethodEntryRequest req = getEventRequestManager().createMethodEntryRequest();
- req.addClassFilter( ((ClassPrepareEvent) event).referenceType() );
+ // change this to create a breakpoint, as the method enter was too slow
+ BreakpointRequest req = null;
+ List list = classType.methodsByName( "onBreak" );
+ if ( list.size() == 0 ) {
+ throw new IllegalStateException( "MVELDebugHandler.onBreak cannot be found by JDI" );
+ }
+
+ Method method = ( Method ) list.get( 0 );
+ if (method != null && !method.isNative()) {
+ Location location = method.location();
+ if (location != null && location.codeIndex() != -1) {
+ req = getEventRequestManager().createBreakpointRequest(location);
+ req.addThreadFilter( ((ClassPrepareEvent) event).thread() );
+ req.setSuspendPolicy( EventRequest.SUSPEND_ALL );
+ } else {
+ throw new IllegalStateException( "MVELDebugHandler.onBreak location cannot be found by JDI" );
+ }
+ } else {
+ throw new IllegalStateException( "MVELDebugHandler.onBreak cannot be found by JDI" );
+ }
+
//breakpointCatched
@@ -696,17 +719,14 @@
Field field;
EventRequest req= manager.createModificationWatchpointRequest(field);
*/
- req.setSuspendPolicy( EventRequest.SUSPEND_EVENT_THREAD );
+ //req.setSuspendPolicy( EventRequest.SUSPEND_EVENT_THREAD );
addJDIEventListener(new IJDIEventListener() {
public boolean handleEvent(Event event, JDIDebugTarget target) {
- MethodEntryEvent entryEvent = (MethodEntryEvent) event;
- String name2 = entryEvent.method().name();
- if (!name2.equals("onBreak")
- && !name2.equals("receiveBreakpoints")) {
- // event.virtualMachine().resume();
- return true;
- }
+ BreakpointEvent entryEvent = (BreakpointEvent) event;
+
+ System.out.println( entryEvent + ":" + entryEvent.location() );
+
try {
IThread[] tharr = getThreads();
ThreadReference t = null;
@@ -743,7 +763,10 @@
}, req);
- req.enable();
+ req.enable();
+
+ // now remove the ClassPrepareEvent
+ removeJDIEventListener(MVELTraceHandler.this, ((ClassPrepareEvent) event).request() );
return true;
}
More information about the jboss-svn-commits
mailing list