@Override
  protected String evaluateExpression(String expression) {
    IFrameDMContext frame = getFrame();
    if (frame == null) {
      return null;
    }

    String sessionId = frame.getSessionId();
    DsfServicesTracker dsfServicesTracker =
        new DsfServicesTracker(DsfUIPlugin.getBundleContext(), sessionId);
    try {
      GetExpressionValueQuery query =
          new GetExpressionValueQuery(frame, expression, dsfServicesTracker);
      DsfSession session = DsfSession.getSession(sessionId);
      if (session != null) {
        session.getExecutor().execute(query);
        try {
          FormattedValueDMData data = query.get();
          if (data != null) return data.getFormattedValue();
        } catch (Exception e) {
        }
      }
    } finally {
      dsfServicesTracker.dispose();
    }
    return null;
  }
  @ThreadSafe
  private synchronized IRegisters getService() {

    String serviceId = DsfServices.createServiceFilter(IRegisters.class, fSession.getId());
    if (fServiceTracker == null) {
      try {
        fServiceTracker =
            new ServiceTracker(
                DsfUIPlugin.getBundleContext(),
                DsfUIPlugin.getBundleContext().createFilter(serviceId),
                null);
        fServiceTracker.open();
      } catch (InvalidSyntaxException e) {
        return null;
      }
    }
    return (IRegisters) fServiceTracker.getService();
  }