@Override public void engineAdded(DebuggerEngine engine) { JPDADebugger debugger = engine.lookupFirst(null, JPDADebugger.class); if (debugger == null) { return ; } synchronized (scriptHandlers) { if (scriptHandlers.containsKey(debugger)) { return ; } } ScriptsHandler sh = new ScriptsHandler(debugger); scriptBP.addJPDABreakpointListener(sh); sourceBindBP.addJPDABreakpointListener(sh); synchronized (scriptHandlers) { scriptHandlers.put(debugger, sh); } }
private void scriptToBeInvoked(ObjectVariable mh) { ObjectVariable member = (ObjectVariable) mh.getField("member"); if (!(member instanceof ObjectVariable)) { logger.info("Variable "+mh+" does not have member field: "+member); return ; } ObjectVariable clazz = (ObjectVariable) member.getField("clazz"); if (!(clazz instanceof ClassVariable)) { logger.info("Variable "+mh+" does not have clazz field: "+clazz); return ; } //JPDAClassType classType = ((ClassVariable) clazz).getReflectedType(); JPDAClassType classType; try { classType = (JPDAClassType) clazz.getClass().getMethod("getReflectedType").invoke(clazz); } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException ex) { Exceptions.printStackTrace(ex); return ; } String className = classType.getName(); MethodBreakpoint mb = MethodBreakpoint.create(className, ""); mb.setHidden(true); mb.setSuspend(debugger.getSuspend()); mb.setSession(debugger); mb.addJPDABreakpointListener(new InScriptBPListener(mb)); DebuggerManager.getDebuggerManager().addBreakpoint(mb); logger.log(Level.FINE, "Created {0} for any method in {1}", new Object[]{mb, className}); }
scriptMethodBP.setSuspend(EventRequest.SUSPEND_EVENT_THREAD); scriptMethodBP.setSession(debugger); scriptMethodBP.addJPDABreakpointListener(this); DebuggerManager.getDebuggerManager().addBreakpoint(scriptMethodBP); synchronized (scriptAccessBreakpoints) {
mb.setSession(debugger); mb.disable(); mb.addJPDABreakpointListener(sbl); DebuggerManager.getDebuggerManager().addBreakpoint(mb); scriptAccessBPs[i] = mb; notifyInvokeBP.setSession(debugger); notifyInvokeBP.disable(); notifyInvokeBP.addJPDABreakpointListener(sibl); DebuggerManager.getDebuggerManager().addBreakpoint(notifyInvokeBP); notifyInvokeBP.addPropertyChangeListener(Breakpoint.PROP_VALIDITY, new PropertyChangeListener() {