public Value getLocalVariableValue(StackFrame fr, String localName) throws AbsentInformationException, IncompatibleThreadStateException { Value ret = null; LocalVariable var = fr.visibleVariableByName(localName); if (var != null) { ret = fr.getValue(var); } return ret; }
public Value getLocalVariableValue(ThreadReference tr, int frameIdx, String localName) throws AbsentInformationException, IncompatibleThreadStateException { StackFrame fr = tr.frame(frameIdx); Value ret = null; LocalVariable var = fr.visibleVariableByName(localName); if (var != null) { ret = fr.getValue(var); } return ret; }
public StringReference getLocalVariableValueAsString(StackFrame fr, String localName) throws AbsentInformationException, IncompatibleThreadStateException { Value val = null; StringReference ret = null; LocalVariable var = fr.visibleVariableByName(localName); if (var != null) { val = fr.getValue(var); if (val instanceof StringReference) { ret = (StringReference) fr.getValue(var); } else { LOGGER.warn( "getLocalVariableValueAsString called with non-String Object: " + var.getClass().getName()); } } else { LOGGER.warn("LocalVariable with name: " + localName + " was not found"); } return ret; }
/* * This function appears to take an exorbitant amount of time why why why */ public boolean setLocalVariableValue(int i, String name, Value sf) throws IncompatibleThreadStateException, InvalidTypeException, ClassNotLoadedException, AbsentInformationException { StackFrame frame = this.currentThread.frames().get(i); LocalVariable var = frame.visibleVariableByName(name); LOGGER.info("got var: " + var.typeName()); try { frame.setValue(var, sf); LOGGER.info("success setting new variable value"); return true; } catch (java.lang.ClassCastException e) { /* * KNOWN ISSUE: when checking type compatibility the debugger * requests the ClassLoader of the type of the variable. When an * object is loaded via reflection (using the current method) this * will return an ObjectReference. The debugger is expecting a * ClassLoaderReference and apparently the ObjectReference cannot be * cast to a ClassLoaderReference. */ LOGGER.info( "ClassCastException due to type assignments with classes loaded via reflection, work around is to load class again"); } return false; }