public Value getValue(LocalVariableProxyImpl localVariable) throws EvaluateException {
    DebuggerManagerThreadImpl.assertIsManagerThread();
    Exception error = null;
    for (int attempt = 0; attempt < 2; attempt++) {
      try {
        LocalVariable variable = localVariable.getVariable();
        Map<LocalVariable, Value> values;
        try {
          values = getAllValues();
        }
        catch (InconsistentDebugInfoException ignored) {
          // possibly failed due to one of the variables, try getting one by one
          return getSingleValue(variable);
        }

        if (values.containsKey(variable)) {
          return values.get(variable);
        }
        else {
          return getSingleValue(variable);
        }
      }
      catch (InvalidStackFrameException e) {
        error = e;
        clearCaches();
      }
      catch (InconsistentDebugInfoException ignored) {
        clearCaches();
        throw EvaluateExceptionUtil.INCONSISTEND_DEBUG_INFO;
      }
      catch (InternalException e) {
        if (e.errorCode() == JvmtiError.INVALID_SLOT || e.errorCode() == JvmtiError.ABSENT_INFORMATION) {
          throw new EvaluateException(JavaDebuggerBundle.message("error.corrupt.debug.info", e.getMessage()), e);
        }
        else {
          throw e;
        }
      }
      catch (Exception e) {
        if (!getVirtualMachine().canBeModified()) { // do not care in read only vms
          LOG.debug(e);
          throw new EvaluateException("Debug data corrupted");
        }
        else {
          throw e;
        }
      }
    }
    throw new EvaluateException(error.getMessage(), error);
  }
public Value getValue(LocalVariableProxyImpl localVariable)