@Override
  public @Nullable XValueChildrenList loadFrame(final @Nullable XStackFrame contextFrame) throws PyDebuggerException {
    final PyStackFrame frame = contextFrame == null ? currentFrame() : (PyStackFrame)contextFrame;
    synchronized (myFrameCacheObject) {
      // Do not reload frame every time it is needed, because due to a bug in pdb, reloading frame clears all variable changes.
      if (!myStackFrameCache.containsKey(frame.getThreadFrameId())) {
        XValueChildrenList values = myDebugger.loadFrame(frame.getThreadId(), frame.getFrameId(), ProcessDebugger.GROUP_TYPE.DEFAULT);
        // Could be null when the current function is called for a thread that is already dead.
        // In this case, a new element shouldn't be added to myStackFrameCache.
        if (values == null) {
          return null;
        }
        myStackFrameCache.put(frame.getThreadFrameId(), values);
      }
      showFailedTestInfoIfNecessary(frame);
    }
    return applyNewValue(getFrameFromCache(frame), frame.getThreadFrameId());
  }
@Override
  public @Nullable XValueChildrenList loadFrame(final @Nullable XStackFrame contextFrame)