Search in sources :

Example 6 with Variable

use of org.eclipse.che.api.debug.shared.model.Variable in project che by eclipse.

the class JavaDebugger method getValue.

/**
     * Get value of variable with specified path. Each item in path is name of variable.
     * <p>
     * Path must be specified according to the following rules:
     * <ol>
     * <li>If need to get field of this object of current frame then first element in array always should be
     * 'this'.</li>
     * <li>If need to get static field in current frame then first element in array always should be 'static'.</li>
     * <li>If need to get local variable in current frame then first element should be the name of local variable.</li>
     * </ol>
     * </p>
     * Here is example. <br/>
     * Assume we have next hierarchy of classes and breakpoint set in line: <i>// breakpoint</i>:
     * <pre>
     *    class A {
     *       private String str;
     *       ...
     *    }
     *
     *    class B {
     *       private A a;
     *       ....
     *
     *       void method() {
     *          A var = new A();
     *          var.setStr(...);
     *          a = var;
     *          // breakpoint
     *       }
     *    }
     * </pre>
     * There are two ways to access variable <i>str</i> in class <i>A</i>:
     * <ol>
     * <li>Through field <i>a</i> in class <i>B</i>: ['this', 'a', 'str']</li>
     * <li>Through local variable <i>var</i> in method <i>B.method()</i>: ['var', 'str']</li>
     * </ol>
     *
     * @param variablePath
     *         path to variable
     * @return variable or <code>null</code> if variable not found
     * @throws DebuggerException
     *         when any other errors occur when try to access the variable
     */
@Override
public SimpleValue getValue(VariablePath variablePath) throws DebuggerException {
    List<String> path = variablePath.getPath();
    if (path.size() == 0) {
        throw new IllegalArgumentException("Path to value may not be empty. ");
    }
    JdiVariable variable;
    int offset;
    if ("this".equals(path.get(0)) || "static".equals(path.get(0))) {
        if (path.size() < 2) {
            throw new IllegalArgumentException("Name of field required. ");
        }
        variable = getCurrentFrame().getFieldByName(path.get(1));
        offset = 2;
    } else {
        try {
            variable = getCurrentFrame().getLocalVariableByName(path.get(0));
        } catch (DebuggerAbsentInformationException e) {
            return null;
        }
        offset = 1;
    }
    for (int i = offset; variable != null && i < path.size(); i++) {
        variable = variable.getValue().getVariableByName(path.get(i));
    }
    if (variable == null) {
        return null;
    }
    List<Variable> variables = new ArrayList<>();
    for (JdiVariable ch : variable.getValue().getVariables()) {
        VariablePathDto chPath = newDto(VariablePathDto.class).withPath(new ArrayList<>(path));
        chPath.getPath().add(ch.getName());
        if (ch instanceof JdiField) {
            JdiField f = (JdiField) ch;
            variables.add(new FieldImpl(f.getName(), true, f.getValue().getAsString(), f.getTypeName(), f.isPrimitive(), Collections.<Variable>emptyList(), chPath, f.isFinal(), f.isStatic(), f.isTransient(), f.isVolatile()));
        } else {
            // Array element.
            variables.add(new VariableImpl(ch.getTypeName(), ch.getName(), ch.getValue().getAsString(), ch.isPrimitive(), chPath, Collections.emptyList(), true));
        }
    }
    return new SimpleValueImpl(variables, variable.getValue().getAsString());
}
Also used : Variable(org.eclipse.che.api.debug.shared.model.Variable) VariablePathDto(org.eclipse.che.api.debug.shared.dto.VariablePathDto) SimpleValueImpl(org.eclipse.che.api.debug.shared.model.impl.SimpleValueImpl) ArrayList(java.util.ArrayList) FieldImpl(org.eclipse.che.api.debug.shared.model.impl.FieldImpl) Breakpoint(org.eclipse.che.api.debug.shared.model.Breakpoint) DebuggerAbsentInformationException(org.eclipse.che.plugin.jdb.server.exceptions.DebuggerAbsentInformationException) VariableImpl(org.eclipse.che.api.debug.shared.model.impl.VariableImpl)

Example 7 with Variable

use of org.eclipse.che.api.debug.shared.model.Variable in project che by eclipse.

the class ZendDebugger method setValue.

@Override
public void setValue(Variable variable) throws DebuggerException {
    Variable matchingVariable = debugVariableStorage.findVariable(variable.getVariablePath());
    ((ZendDbgVariable) matchingVariable).setValue(variable.getValue());
}
Also used : Variable(org.eclipse.che.api.debug.shared.model.Variable) ZendDbgVariable(org.eclipse.che.plugin.zdb.server.variables.ZendDbgVariable) IDbgVariable(org.eclipse.che.plugin.zdb.server.variables.IDbgVariable) ZendDbgVariable(org.eclipse.che.plugin.zdb.server.variables.ZendDbgVariable)

Example 8 with Variable

use of org.eclipse.che.api.debug.shared.model.Variable in project che by eclipse.

the class ZendDbgSessionTest method testSetValue.

@Test(groups = { "zendDbg" }, dependsOnGroups = { "checkPHP" })
public void testSetValue() throws Exception {
    List<Breakpoint> breakpoints = new ArrayList<>();
    Breakpoint bp1 = new BreakpointImpl(ZendDbgLocationHandler.createDBG(dbgHelloFile, 5));
    breakpoints.add(bp1);
    triggerSession(dbgHelloFile, getDbgSettings(false, false), breakpoints);
    awaitBreakpointActivated(bp1);
    awaitSuspend(dbgHelloFile, 5);
    StackFrameDump stackFrameDump = debugger.dumpStackFrame();
    int lastVar = stackFrameDump.getVariables().size() - 1;
    Variable variableToFind = new VariableImpl(null, null, "123", false, new VariablePathImpl(String.valueOf(lastVar)), Collections.emptyList(), false);
    debugger.setValue(variableToFind);
    assertEquals(stackFrameDump.getVariables().get(lastVar).getValue(), "123");
    variableToFind = new VariableImpl(null, null, "\"ABC\"", false, new VariablePathImpl(String.valueOf(lastVar)), Collections.emptyList(), false);
    debugger.setValue(variableToFind);
    assertEquals(stackFrameDump.getVariables().get(lastVar).getValue(), "\"ABC\"");
}
Also used : Breakpoint(org.eclipse.che.api.debug.shared.model.Breakpoint) VariableImpl(org.eclipse.che.api.debug.shared.model.impl.VariableImpl) BreakpointImpl(org.eclipse.che.api.debug.shared.model.impl.BreakpointImpl) Variable(org.eclipse.che.api.debug.shared.model.Variable) VariablePathImpl(org.eclipse.che.api.debug.shared.model.impl.VariablePathImpl) ArrayList(java.util.ArrayList) StackFrameDump(org.eclipse.che.api.debug.shared.model.StackFrameDump) Breakpoint(org.eclipse.che.api.debug.shared.model.Breakpoint) Test(org.testng.annotations.Test)

Aggregations

Variable (org.eclipse.che.api.debug.shared.model.Variable)8 VariableImpl (org.eclipse.che.api.debug.shared.model.impl.VariableImpl)5 ArrayList (java.util.ArrayList)3 VariablePathDto (org.eclipse.che.api.debug.shared.dto.VariablePathDto)3 VariablePath (org.eclipse.che.api.debug.shared.model.VariablePath)3 VariablePathImpl (org.eclipse.che.api.debug.shared.model.impl.VariablePathImpl)3 VariableDto (org.eclipse.che.api.debug.shared.dto.VariableDto)2 Breakpoint (org.eclipse.che.api.debug.shared.model.Breakpoint)2 SimpleValue (org.eclipse.che.api.debug.shared.model.SimpleValue)2 StackFrameDump (org.eclipse.che.api.debug.shared.model.StackFrameDump)2 BaseTest (org.eclipse.che.plugin.debugger.ide.BaseTest)2 Test (org.junit.Test)2 IOException (java.io.IOException)1 Map (java.util.Map)1 SimpleValueDto (org.eclipse.che.api.debug.shared.dto.SimpleValueDto)1 BreakpointImpl (org.eclipse.che.api.debug.shared.model.impl.BreakpointImpl)1 FieldImpl (org.eclipse.che.api.debug.shared.model.impl.FieldImpl)1 SimpleValueImpl (org.eclipse.che.api.debug.shared.model.impl.SimpleValueImpl)1 StackFrameDumpImpl (org.eclipse.che.api.debug.shared.model.impl.StackFrameDumpImpl)1 DebuggerException (org.eclipse.che.api.debugger.server.exceptions.DebuggerException)1