@Override
 public void disconnect() {
   for (ProcessDebugger d : allDebuggers()) {
     d.disconnect();
   }
   disposeAcceptor();
 }
 @Override
 public void setBreakpoint(
     String typeId, String file, int line, String condition, String logExpression) {
   for (ProcessDebugger d : allDebuggers()) {
     d.setBreakpoint(typeId, file, line, condition, logExpression);
   }
 }
 @Override
 public void setBreakpointWithFuncName(
     @NotNull String typeId,
     @NotNull String file,
     int line,
     @Nullable String condition,
     @Nullable String logExpression,
     @Nullable String funcName) {
   for (ProcessDebugger d : allDebuggers()) {
     d.setBreakpointWithFuncName(typeId, file, line, condition, logExpression, funcName);
   }
 }
  @Override
  public void close() {
    for (ProcessDebugger d : allDebuggers()) {
      d.close();
    }
    disposeAcceptor();

    if (!myServerSocket.isClosed()) {
      try {
        myServerSocket.close();
      } catch (IOException e) {
        LOG.warn("Error closing socket", e);
      }
    }
  }
  @NotNull
  private ProcessDebugger debugger(@NotNull String threadId) {
    ProcessDebugger debugger = myThreadRegistry.getDebugger(threadId);
    if (debugger != null) {
      return debugger;
    } else {
      // thread is not found in registry - lets search for it in attached debuggers

      for (ProcessDebugger d : myOtherDebuggers) {
        for (PyThreadInfo thread : d.getThreads()) {
          if (threadId.equals(thread.getId())) {
            return d;
          }
        }
      }

      // if not found then return main debugger
      return myMainDebugger;
    }
  }
 @Override
 public void removeBreakpoint(@NotNull String typeId, @NotNull String file, int line) {
   for (ProcessDebugger d : allDebuggers()) {
     d.removeBreakpoint(typeId, file, line);
   }
 }
 @Override
 public void setTempBreakpoint(@NotNull String type, @NotNull String file, int line) {
   for (ProcessDebugger d : allDebuggers()) {
     d.setTempBreakpoint(type, file, line);
   }
 }
 @Override
 public void suspendAllThreads() {
   for (ProcessDebugger d : allDebuggers()) {
     d.suspendAllThreads();
   }
 }
 @Override
 public void execute(@NotNull AbstractCommand command) {
   for (ProcessDebugger d : allDebuggers()) {
     d.execute(command);
   }
 }
 @Override
 public void removeTempBreakpoint(String file, int line) {
   for (ProcessDebugger d : allDebuggers()) {
     d.removeTempBreakpoint(file, line);
   }
 }