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}); }
@Override public Breakpoint[] initBreakpoints() { scriptBP = ClassLoadUnloadBreakpoint.create(JSUtils.NASHORN_SCRIPT+"*", false, ClassLoadUnloadBreakpoint.TYPE_CLASS_LOADED); scriptBP.setHidden(true); scriptBP.setSuspend(EventRequest.SUSPEND_NONE); sourceBindBP = MethodBreakpoint.create(NASHORN_CONTEXT_CLASS, NASHORN_CONTEXT_SOURCE_BIND_METHOD); sourceBindBP.setHidden(true); sourceBindBP.setSuspend(EventRequest.SUSPEND_EVENT_THREAD); return new Breakpoint[] { scriptBP, sourceBindBP }; }
scriptMethodBP.setSuspend(EventRequest.SUSPEND_EVENT_THREAD); scriptMethodBP.setSession(debugger); scriptMethodBP.addJPDABreakpointListener(this);
MethodBreakpoint mb = MethodBreakpoint.create(SCRIPT_ACCESS_CLASS, method); mb.setHidden(true); mb.setSuspend(debugger.getSuspend()); mb.setSession(debugger); mb.disable(); notifyInvokeBP.setMethodSignature(SCRIPT_NOTIFY_INVOKE_METHOD_SIG); notifyInvokeBP.setHidden(true); notifyInvokeBP.setSuspend(debugger.getSuspend()); notifyInvokeBP.setSession(debugger); notifyInvokeBP.disable();