docs: function(serviceRegistry, commandRegistry, preferences, parent, debugSocket) {
          this._commandRegistry = commandRegistry;
          this._preferences = preferences;
          this._parent = parent;
          this._debugService = serviceRegistry.getService('orion.debug.service');
          this._debugSocket = debugSocket;
          this._domNode = this._createDomNode();
          this._stopReasonElement = lib.$('.stopReason', this._domNode);
          this._stackTraceElement = lib.$('.stackTrace', this._domNode);
          this._debugOutputElement = lib.$('.debugOutput', this._domNode);
          this._watchListElement = lib.$('.watchList', this._domNode);
          this._variableListElement = lib.$('.variableList', this._domNode);
          this._breakpointsElement = lib.$('.breakpoints', this._domNode);
  
          this._threads = {};
          this._stoppedThreads = {};
          this._currentThreadId = undefined;
          this._currentFrameId = undefined;
  
          this._loadWatches();
          this._loadBreakpoints();
          this._hookDefaultBreakpoints();
  
          this._debugService.addEventListener('WatchAdded', this._boundLoadWatches = this._loadWatches.bind(this));
          this._debugService.addEventListener('WatchRemoved', this._boundLoadWatches);
          this._debugService.addEventListener('BreakpointAdded', this._boundLoadBreakpoints = this._loadBreakpoints.bind(this));
          this._debugService.addEventListener('BreakpointRemoved', this._boundLoadBreakpoints);
          // this._debugService.addEventListener('BreakpointEnabled', this._boundLoadBreakpoints);
          // this._debugService.addEventListener('BreakpointDisabled', this._boundLoadBreakpoints);
  
          this._debugSocket.addEventListener('launch', this._boundHandleLaunchEvent = this._handleLaunchEvent.bind(this));
          this._debugSocket.addEventListener('status', this._boundHandleStatusEvent = this._handleStatusEvent.bind(this));
          this._debugSocket.addEventListener('capabilities', this._boundHandleCapabilitiesEvent = this._handleCapabilitiesEvent.bind(this));
          this._debugSocket.addEventListener('event', this._boundHandleAdapterEvent = this._handleAdapterEvent.bind(this));
  
          lib.$('.debugContinue', this._domNode).addEventListener('click', this._continueOnClick.bind(this));
          lib.$('.debugPause', this._domNode).addEventListener('click', this._pauseOnClick.bind(this));
          lib.$('.debugStepOver', this._domNode).addEventListener('click', this._stepOverOnClick.bind(this));
          lib.$('.debugStepIn', this._domNode).addEventListener('click', this._stepInOnClick.bind(this));
          lib.$('.debugStepOut', this._domNode).addEventListener('click', this._stepOutOnClick.bind(this));
          lib.$('.debugReverse', this._domNode).addEventListener('click', this._reverseOnClick.bind(this));
          lib.$('.debugStepBack', this._domNode).addEventListener('click', this._stepBackOnClick.bind(this));
          lib.$('.debugRestartFrame', this._domNode).addEventListener('click', this._restartFrameOnClick.bind(this));
  
          lib.$('.replInput input', this._domNode).addEventListener('change', this._replOnSubmit.bind(this));
  
          lib.$('.debugClearOutput', this._domNode).addEventListener('click', this._clearOutputOnClick.bind(this));
          lib.$('.debugAddWatch', this._domNode).addEventListener('click', this._addWatchOnClick.bind(this));
          lib.$$('.debugMaximize', this._domNode).forEach(function(maximizeButton) {
              maximizeButton.addEventListener('click', this._maximizeOnClick.bind(this));
          }.bind(this));
      }