def execute(self, command):
        # Do not execute if no command is set
        if not command or not is_connected():
            return

        # Send command to debugger engine
        S.SESSION.send(command)
        response = S.SESSION.read()

        # Reset previous breakpoint values
        S.BREAKPOINT_EXCEPTION = None
        S.BREAKPOINT_ROW = None
        S.CONTEXT_DATA.clear()
        self.watch_expression()
        # Set debug layout
        self.run_command('xdebug_layout')

        # Handle breakpoint hit
        for child in response:
            if child.tag == dbgp.ELEMENT_BREAKPOINT or child.tag == dbgp.ELEMENT_PATH_BREAKPOINT:
                # Get breakpoint attribute values
                fileuri = child.get(dbgp.BREAKPOINT_FILENAME)
                lineno = child.get(dbgp.BREAKPOINT_LINENO)
                exception = child.get(dbgp.BREAKPOINT_EXCEPTION)
                filename = get_real_path(fileuri)
                if (exception):
                    info(exception + ': ' + child.text)
                    # Remember Exception name and first line of message
                    S.BREAKPOINT_EXCEPTION = { 'name': exception, 'message': child.text.split('\n')[0], 'filename': fileuri, 'lineno': lineno }

                # Check if temporary breakpoint is set and hit
                if S.BREAKPOINT_RUN is not None and S.BREAKPOINT_RUN['filename'] == filename and S.BREAKPOINT_RUN['lineno'] == lineno:
                    # Remove temporary breakpoint
                    if S.BREAKPOINT_RUN['filename'] in S.BREAKPOINT and S.BREAKPOINT_RUN['lineno'] in S.BREAKPOINT[S.BREAKPOINT_RUN['filename']]:
                        self.run_view_command('xdebug_breakpoint', {'rows': [S.BREAKPOINT_RUN['lineno']], 'filename': S.BREAKPOINT_RUN['filename']})
                    S.BREAKPOINT_RUN = None
                # Skip if temporary breakpoint was not hit
                if S.BREAKPOINT_RUN is not None and (S.BREAKPOINT_RUN['filename'] != filename or S.BREAKPOINT_RUN['lineno'] != lineno):
                    self.run_command('xdebug_execute', {'command': 'run'})
                    return
                # Show debug/status output
                self.status_message('Xdebug: Breakpoint')
                info('Break: ' + filename + ':' + lineno)
                # Store line number of breakpoint for displaying region marker
                S.BREAKPOINT_ROW = { 'filename': filename, 'lineno': lineno }
                # Focus/Open file window view
                self.timeout(lambda: show_file(filename, lineno))

        # On breakpoint get context variables and stack history
        if response.get(dbgp.ATTRIBUTE_STATUS) == dbgp.STATUS_BREAK:
            # Context variables
            context = self.get_context_values()
            self.timeout(lambda: show_content(DATA_CONTEXT, context))

            # Stack history
            stack = self.get_stack_values()
            self.timeout(lambda: show_content(DATA_STACK, stack))

            # Watch expressions
            self.watch_expression()

        # Reload session when session stopped, by reaching end of file or interruption
        if response.get(dbgp.ATTRIBUTE_STATUS) == dbgp.STATUS_STOPPING or response.get(dbgp.ATTRIBUTE_STATUS) == dbgp.STATUS_STOPPED:
            self.run_command('xdebug_session_stop', {'restart': True})
            self.run_command('xdebug_session_start', {'restart': True})
            self.status_message('Xdebug: Finished executing file on server. Reload page to continue debugging.')

        # Render breakpoint markers
        self.timeout(lambda: render_regions())
dataset/ETHPy150Open martomo/SublimeTextXdebug/xdebug/session.py/SocketHandler.execute/original