def start(self, opts=None):
<EOL>try:<EOL><INDENT>self.trace_hook_suspend = True<EOL>get_option = lambda key: Mmisc.option_set(opts, key,<EOL>default.START_OPTS)<EOL>add_hook_opts = get_option('<STR_LIT>')<EOL>if not tracer.is_started() or get_option('<STR_LIT>'):<EOL><INDENT>tracer_start_opts = default.START_OPTS.copy()<EOL>if opts:<EOL><INDENT>tracer_start_opts.update(opts.get('<STR_LIT>', {}))<EOL><DEDENT>tracer_start_opts['<STR_LIT>'] = self.trace_dispatch<EOL>tracer_start_opts['<STR_LIT>'] = add_hook_opts<EOL>tracer.start(tracer_start_opts)<EOL><DEDENT>elif not tracer.find_hook(self.trace_dispatch):<EOL><INDENT>tracer.add_hook(self.trace_dispatch, add_hook_opts)<EOL>pass<EOL><DEDENT>self.execution_status = '<STR_LIT>'<EOL><DEDENT>finally:<EOL><INDENT>self.trace_hook_suspend = False<EOL><DEDENT>return<EOL>
We've already created a debugger object, but here we start
        debugging in earnest. We can also turn off debugging (but have
        the hooks suspended or not) using 'stop'.

        'opts' is a hash of every known value you might want to set when
        starting the debugger. See START_OPTS of module default.